将Keras Fit Generator函数中使用的验证数据的训练设置为False

时间:2019-07-01 15:36:06

标签: keras

如何为Keras training中使用的Falsevalidation_data设置为fit_generator?我的模型中有Dropout层,我希望在训练过程中成为True,在验证和测试期间成为False

2 个答案:

答案 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