我用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
...
这个时代似乎要结束了,但是新的训练又开始了。在
^{pr2}$另外,我把相关代码贴在这里
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])
我做错什么了吗?我找不到任何解决办法
真希望有人能帮我,谢谢
-----------------------------------更新---------------------------------
一开始我以为是steps_per_epoch
的错误。但是我错了。当我在没有steps_per_epoch
的情况下重新开始培训时。它又显示出来了。在
通过消除,我发现它是由validation_data
引起的。我不知道为什么,我不能删除validation_data
,因为如果我在回调中使用tensorboard
,那么它必须被使用。我发现如果我删除了tensorboard的功能并保留了验证数据,它会处理得很快。在
以下是我在回调中的tensorboard函数:
tb_cb = keras.callbacks.TensorBoard(log_dir=board_file, write_images=1, histogram_freq=1)
keras.callbacks.TensorBoard
和{
此外,正如validation_steps
的api所说:
Only relevant if
validation_data
is a generator. Total number of steps (batches of samples) to yield fromgenerator
before stopping. Optional forSequence
: if unspecified, will use thelen(validation_data)
as a number of steps.
我可以看出,新的培训过程的步骤实际上等于我的验证数据的数量。在
fit_generator
还创建一个验证数据发电机。所以它的验证过程是成批的,训练后看到的只是中间结果,模型不会根据验证数据进行训练。在下面是一些相关的讨论:
Test data being used for validation data?
Test data being used for validation data in chinese
相关问题 更多 >
编程相关推荐