当我使用train_on_batch训练模型时,如何告诉Keras学习阶段?

时间:2019-01-09 11:44:16

标签: tensorflow keras generative-adversarial-network dropout

我的模型中有辍学层,所以我希望keras找出要运行的培训和测试阶段,或者忽略辍学层,我发现K.set_learning_phase可以帮我这个忙,但是我如何将其添加到培训中和测试过程?我的代码是这样的:

def discriminator(self):
    x_A = Input(shape=self.shape)
    x_B = Input(shape=self.shape)
    x = concatenate([x_A, x_B], axis=-1)
    self.model = Sequential()
    self.model.add(Dropout(0.5, input_shape=self.shape_double))
    self.model.add(LSTM(200, return_sequences=True, kernel_constraint=unit_norm()))
    self.model.add(Dropout(0.5))
    self.model.add(LSTM(200, return_sequences=True, kernel_constraint=unit_norm()))
    self.model.add(Dropout(0.5))
    self.model.add(Flatten())
    self.model.add(Dense(8, activation="softmax", kernel_constraint=unit_norm())

    label=self.model(x)

    return Model([x_A,x_B], label)
...
def train(self, epoch, batch_size):
    for epoch in range(epochs):
        for batch,train_A,train_B,train_label in enumerate(Load_train(batch_size)):
            Dloss = self.discriminator.train_on_batch([train_A,train_B],train_label)
            ...
def test(self,test_A,test_B,test_label):
    predicted_label_dist = self.discriminator.predict([test_A,test_B])
    ...

任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

当您称呼“适合”或“预测”时,Keras确实会自行找出合适的学习阶段。因此,您的辍学将仅在培训期间应用,而不会在测试期间应用。但是,如果您仍然希望自己配置培训阶段,即覆盖默认行为,则可以这样做(来自keras文档):

keras.backend.set_learning_phase(value) 

位置:

  

value:学习阶段的值,0或1(整数)。

只需将此代码添加到您的培训和测试功能中即可。