【发布时间】:2019-05-15 18:39:34
【问题描述】:
使用 tensorflow 2.0 创建模型时,我会得到两种不同的行为,具体取决于我进行前向传递的方式:
1) 如果我使用model(X) 进行前向传递,那就没问题了,调用方法中的“训练”参数正常工作
对比
2) 如果我使用 model.fit(X, y) 来运行模型,那么“training”参数似乎会被覆盖并设置为 None,无论其默认值是 True 还是 False。
有人知道为什么会这样吗?例如,这意味着我无法设置模型,以便仅当训练设置为 True 时才会发生丢失。
!pip install tensorflow-gpu==2.0.0-alpha0
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model
X = np.random.random((250, 5))
y = X[:, 0] > 0 * 1.0
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)
self.dropout = tf.keras.layers.Dropout(0.5)
def call(self, inputs, training=True):
print("Training ", training)
x = self.dense1(inputs)
if training:
x = self.dropout(x, training=training)
return self.dense2(x)
model = MyModel()
然后按预期打印出 Training True:
model(X) # prints out: Training True
但这会打印出 Training None 吗?
model.compile(optimizer='adam', loss='mse')
model.fit(X, y, epochs=1) # prints out: Training None
【问题讨论】: