test/hfghgf13123113223343

한 줄 소개

Updated on 22.09.20
hfghgf13123113223343.py
''' ---test/hfghgf13123113223343 Auto Generate Code--- Author : test Project Name: hfghgf13123113223343 Project Link: https://blockai.kr/test/hfghgf13123113223343 (BlockAI) Create Date : 2022-09-21 ---Requirements--- # 사용자의 환경(OS, CUDA 등)에 따라 라이브러리 버전을 맞춰주세요 pip install tensorflow==2.5.3 pip install tqdm pip install pandas pip install scikit-learn ---Folder Structure--- --📂 data |--📂 input |--📄 train.* |--📄 test.* --📄 hfghgf13123113223343.py --📄 hfghgf13123113223343.ipynb --📄 requirements.txt ''' import os import argparse import math from glob import glob import pandas as pd from sklearn import preprocessing import numpy as np import tensorflow as tf path_sep = os.sep class Dataset(tf.keras.utils.Sequence): def __init__(self, batch_size, inputs, targets=[], shuffle=False): self.batch_size = batch_size self.inputs = np.array(inputs) self.targets = np.array(targets) self.shuffle = shuffle self.indexes = np.arange(len(self.inputs)) if self.shuffle: np.random.shuffle(self.indexes) def __len__(self): # batch_size에 맞게 한 에폭에 사용되는 데이터 개수를 계산해야합니다 return math.ceil(len(self.inputs) / self.batch_size) def __getitem__(self, idx): # 한 스텝에서 batch_size만큼 데이터를 선택해서 return 합니다 start_idx = idx * self.batch_size # end_idx가 최대 길이를 넘어가지 않게 제한합니다 end_idx = (idx + 1) * self.batch_size if len(self.inputs) > (idx + 1) * self.batch_size else len(self.inputs) batch_indexes = self.indexes[start_idx:end_idx] if len(self.targets) == 0: return self.inputs[batch_indexes] else: return self.inputs[batch_indexes], self.targets[batch_indexes] class Dataloader: def __init__(self, data_folder, batch_size, shuffle): self.data_folder = data_folder self.batch_size = batch_size self.shuffle = shuffle self.train_dataset = None self.test_dataset = None self.set_preprocessing() self.setup() def set_preprocessing(self): data = pd.read_csv(glob(os.path.join(self.data_folder, 'input', 'train.*'))[0], sep=',', index_col=None, encoding='utf-8') columns = data.columns self.target_columns = [columns[None]] def preprocessing(self, data): columns = data.columns.tolist() # 타겟 데이터가 없으면 빈 배열을 리턴합니다. try: targets = data[self.target_columns].values.tolist() inputs = data.drop(self.target_columns, axis=1).values.tolist() except: targets = [] inputs = data.values.tolist() return inputs, targets def setup(self): train_data = pd.read_csv(glob(os.path.join(self.data_folder, 'input', 'train.*'))[0], sep=',', index_col=None, encoding='utf-8') # 학습데이터 준비 train_inputs, train_targets = self.preprocessing(train_data) # train 데이터만 shuffle을 적용해줍니다, 필요하다면 val, test 데이터에도 shuffle을 적용할 수 있습니다 self.train_dataset = Dataset(self.batch_size, train_inputs, train_targets, self.shuffle) # 평가데이터 준비 test_data = pd.read_csv(glob(os.path.join(self.data_folder, 'input', 'test.*'))[0], sep=',', index_col=None, encoding='utf-8') test_inputs, test_targets = self.preprocessing(test_data) self.test_dataset = Dataset(self.batch_size, test_inputs, test_targets) class Model(tf.keras.Model): def __init__(self): super(Model, self).__init__() self.tanh_1 = tf.keras.activationstanh() self.gelu_1 = tf.keras.activationsgelu() self.categoryencoding_1 = tf.keras.layers.experimental.preprocessingCategoryEncoding() self.randomcontrast_1 = tf.keras.layers.experimental.preprocessingRandomContrast(factor='eqw') self.randomwidth_1 = tf.keras.layers.experimental.preprocessingRandomWidth() def call(self, x): logits_0 = self.tanh_1(x) logits_0 = self.gelu_1(logits_0) logits_0 = self.categoryencoding_1(logits_0) logits_0 = self.randomcontrast_1(logits_0) logits_0 = self.randomwidth_1(logits_0) return logits_0 def train_step(self, data): x, y = data y_preds = self(x) return {'loss': loss} def test_step(self, data): x, y = data y_preds = self(x) return {'loss': loss} def predict_step(self, data): x = data y_preds = self(x) return y_preds if __name__ == '__main__': # https://docs.python.org/ko/3/library/argparse.html # 하이퍼 파라미터 등 각종 설정값을 입력받습니다 # 터미널 실행 예시 : python3 run.py --batch_size=64 ... # 실행 시 '--batch_size=64' 같은 인자를 입력하지 않으면 default 값이 기본으로 실행됩니다 parser = argparse.ArgumentParser() parser.add_argument('--data_folder', default='./data') parser.add_argument('--batch_size', default=0) parser.add_argument('--max_epoch', default=0) parser.add_argument('--shuffle', default=False) args = parser.parse_args() dataloader = Dataloader(args.data_folder, args.batch_size, args.shuffle) model = Model() # 손실함수와 옵티마이저를 설정합니다 optimizer = [] model.compile(optimizer=optimizer) # 모델 학습을 실행합니다 model.fit(dataloader.train_dataset, epochs=args.max_epoch) # 테스트 데이터에 타겟값이 있다면 evaluate를, 없다면 predict를 실행해주세요 model.evaluate(dataloader.test_dataset) preds = model.predict(dataloader.test_dataset)
Readme.md
service
문의하기