在与Keras玩游戏之后,我意识到不知何故,models.fit()在再次调用参数后不再重新训练参数。
以下是我的玩具示例。我把models.fit()调用了6次,在第四个时期,我用一个全新的数据集来训练它。 应该发生的是模型应该在第四次迭代时改变,因此第五次迭代应该产生不同的分数作为第三次迭代。但是,这不是正在发生的事情。
model = Sequential()
model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=(1, 199, 40)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
nb_epoch = 6
# I know you can add nb_epoch into the fit function, but please ignore that for now
for e in range(nb_epoch):
if e ==3:
# For the third epoch only, let's train the model
# on a completely new dataset
model.fit(X_train1, y_train1, nb_epoch=1, batch_size=batch_size)
else:
model.fit(X_train2, y_train2, nb_epoch=1, batch_size=batch_size)
结果:
546/546 [==============================] - 11s - loss: 4.0249 - acc: 0.6996
Epoch 1/1
546/546 [==============================] - 11s - loss: 4.0443 - acc: 0.7491
Epoch 1/1
546/546 [==============================] - 11s - loss: 4.0443 - acc: 0.7491
Epoch 1/1
365/365 [==============================] - 7s - loss: 3.7977 - acc: 0.7644
Epoch 1/1
546/546 [==============================] - 11s - loss: 4.0443 - acc: 0.7491
Epoch 1/1
546/546 [==============================] - 11s - loss: 4.0443 - acc: 0.7491
在第二次迭代对模型完全没有影响之后,似乎就像调用model.fit一样。即使给出了新的数据。
有关为何发生这种情况的任何想法? 我也尝试过train_on_batch,它会产生相同的结果。