我使用keras(tensorflow)训练我的模型。我使用功能fit_generator
,因为我使用ImageDataGenerator
进行数据扩充。
这是我的问题,我发现有两种训练过程。前一种我不知道这是什么,但后者只是该模型正在从原始数据中学习。情况如下:
...
145/147 [============================>.] - ETA: 0s - loss: 1.5847 - acc: 0.5120
146/147 [============================>.] - ETA: 0s - loss: 1.5838 - acc: 0.5117
...
看来这个纪元会结束,但是新的训练开始于这个纪元。
...
32/1567 [..............................] - ETA: 3:11 - loss: 1.8080 - acc: 0.4688
64/1567 [>.............................] - ETA: 2:58 - loss: 1.7491 - acc: 0.5000
...
此外,我在此处发布相关代码
datagen = keras.preprocessing.image.ImageDataGenerator( featurewise_std_normalization=True, rotation_range=20,
width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True)
datagen.fit(trainX)
model.fit_generator(datagen.flow(trainX, trainY, batch_size=BATCH_SIZE),
steps_per_epoch=trainX.shape[0]//BATCH_SIZE, epochs=10,
validation_data=(testX,testY),
verbose=1,callbacks=[tb_cb,reduce_lr,early])
我做错了什么吗?而且我找不到任何解决办法
非常希望有人可以帮助我,谢谢
-------------------------------- Updata -------------- -------------------
起初我以为是steps_per_epoch
的错。但是我错了。当我在没有steps_per_epoch
的情况下重新开始训练时。再次显示。
通过消除,我发现它是由validation_data
引起的。我不知道为什么,并且我无法删除validation_data
,因为如果我在其中使用tensorboard
则必须使用它回调。而且我发现,如果删除tensorboard功能并保留validation_data,它将处理得如此之快。
这是我在回调函数中的张量板函数:
tb_cb = keras.callbacks.TensorBoard(log_dir=board_file, write_images=1, histogram_freq=1)
keras.callbacks.TensorBoard
和validation_data
之间必须存在某种关系
此外,如validation_steps
的api所述:
仅与
validation_data
相关 是一个发电机。总步骤数(一批样品) 在停止之前从generator
屈服。Sequence
的可选:如果未指定,将使用len(validation_data)
作为许多步骤。
我可以说新培训过程的步骤实际上等于我的验证数据的数量。
答案 0 :(得分:0)
fit_generator
还创建了一个验证数据生成器。因此,它的验证过程是全部分批进行的,训练后我看到的只是中间结果。模型不会在验证数据上训练。>
这是一些相关的讨论: