Краткое описание проблемы:
Я пробую базовую модель ANN в задаче двоичной классификации.У меня, вероятно, большие данные всего 2 ГБ состоит из 150 файлов CSV. Данные состоят из 6 функций и 1 цели.
Важное примечание: Это задача двоичной классификации, и каждый файл состоит только из одной метки.Например.file_1 содержит только метку 0, а file_2 включает только метку 1.
Задача 1: Я использую метод Keras * fit_generator
для чтения файла данных по файлу и пакета по партии.Я начинаю тренировать модель, , но модель дает разные результаты в конце каждой тренировки. Кроме того, иногда точность уменьшается со временем.Я думаю, это из-за того, что eacy файл содержит только одну метку.
Проблема 2: Я не уверен, правильно ли я написал метод data_generator
.Мне нужно получить данные из разных файлов CSV.Мы будем благодарны за любые предложения.
Какой-то код
Простая модель ANN:
def create_model():
model = Sequential()
model.add(Dense(32, kernel_initializer='normal',
activation='relu', input_dim=(6)))
model.add(Dropout(0.5))
model.add(Dense(16, kernel_initializer='normal', activation='relu'))
model.add(Dense(8, kernel_initializer='normal', activation='relu'))
model.add(Dense(16, kernel_initializer='normal', activation='relu'))
model.add(Dense(32, kernel_initializer='normal', activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
model.compile(optimizer='adam', loss="binary_crossentropy",
metrics=['accuracy'])
return model
Генератор данных :Я пытаюсь сгенерировать данные из разных файлов CSV
def data_generotto(path: str, batchsize: int):
while True:
for csv_file in os.listdir(path):
chunks = pd.read_csv(os.path.join(
path, csv_file), sep=';', chunksize=batchsize)
for i, chunk in enumerate(chunks):
X, y = preprocess.preprocess(chunk)
yield (X, y)
Код для получения общего размера данных:
def get_total_size(path: str):
for csv_file in os.listdir(path):
global SIZE
with open(os.path.join(path, csv_file)) as f:
for line in f:
SIZE += 1
SIZE -= 1 # minus header line
Основной поток программы:
np.random.seed(7)
SIZE = 0
BS = 1000
EPOCHS = 5
if __name__ == "__main__":
model = cnn.create_model()
get_total_size("./complete_csv")
print("size calculated")
H = model.fit_generator(data_generotto(
"./complete_csv", BS), steps_per_epoch=SIZE // BS, epochs=EPOCHS, workers=-1)
save_model(model, "./MODEL.h5")