我的模型中有辍学层,所以我希望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])
...
任何建议将不胜感激。谢谢。
答案 0 :(得分:1)
当您称呼“适合”或“预测”时,Keras确实会自行找出合适的学习阶段。因此,您的辍学将仅在培训期间应用,而不会在测试期间应用。但是,如果您仍然希望自己配置培训阶段,即覆盖默认行为,则可以这样做(来自keras文档):
keras.backend.set_learning_phase(value)
位置:
value:学习阶段的值,0或1(整数)。
只需将此代码添加到您的培训和测试功能中即可。