如何为Keras training
中使用的False
将validation_data
设置为fit_generator
?我的模型中有Dropout
层,我希望在训练过程中成为True
,在验证和测试期间成为False
。
答案 0 :(得分:0)
Keras在进行验证时会自动将learning_phase设置为False。您无需执行任何其他操作。
退出节点会自动检查它们是否处于训练模式。
https://github.com/keras-team/keras/blob/master/keras/layers/core.py#L126
如果要验证Keras是否自动更改学习模式标志,可以执行下面的代码。它会添加一个Lambda图层,该图层会在图形上添加一个打印张量,并在每种情况下输出不同的消息。
from tensorflow import keras
from tensorflow.keras.layers import *
from tensorflow.keras.models import Model
from tensorflow.keras import backend as K
def inspect(x):
xp = K.in_train_phase(K.print_tensor(x, message='train x:'),
K.print_tensor(x, message='test x:'))
return xp
def make_model():
inp = Input(shape=(4,))
h1 = Dense(2)(inp)
h1p = Lambda(inspect)(h1)
out = Dense(1)(h1p)
model = Model(inp, out)
model.compile('adam', 'mse')
return model
model = make_model()
model.summary()
import numpy as np
X_train = np.random.rand(1, 4)
Y_train = np.random.rand(1, 1)
X_test = np.random.rand(1, 4)
Y_test = np.random.rand(1, 1)
model.fit(X_train, Y_train, validation_data=(X_test, Y_test))
答案 1 :(得分:-1)
我在数据生成器函数中添加了一个is_training
自变量。如果是True
,我将Keras学习阶段设置为1,否则设置为0(请参阅keras.io/backend/中的文档):
if is_training:
K.set_learning_phase( 1 )
else:
K.set_learning_phase( 0 )
因此,对于我的训练数据生成器,我使用is_training = True
,对于我的验证数据生成器,我使用is_training = False
。