【发布时间】:2019-04-12 15:13:37
【问题描述】:
问题总结:
我正在对二元分类任务尝试一个基本的 ANN 模型。我有大数据总共 2 GB 由 150 个 csv 文件组成。数据由 6 个特征和 1 个目标组成。
重要提示:这是一个二分类任务,每个文件只包含一个标签。例如。 file_1 只包含标签 0,file_2 只包含标签 1。
问题一: 我使用 Keras 的fit_generator 方法,逐个文件,逐批读取数据。我开始训练模型,但模型在每次训练结束时给出不同的结果。此外,有时准确性会随着时间的推移而降低。我认为这是因为 eacy 文件只包含一个标签。
问题 2: 我不确定我是否正确编写了 data_generator 方法。我需要从不同的 CSV 文件中获取数据。任何形式的建议将不胜感激。
一些代码
简单的人工神经网络模型:
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")
【问题讨论】: