如何在 "compile" 时以 Eager 模式执行 TensorFlow 2 Keras Sequential 模型?
How to execute TensorFlow 2 Keras Sequential model in eager mode when "compile"?
我想使用 TF2 的急切执行以 "pythonic" 的方式构建损失,但即使在急切模式下,Keras 也会传递非急切张量。
代码:
def conditional_loss(self, y_true, y_pred):
print(y_true)
return 0
def define_model(self):
self.model = keras.Sequential([
keras.layers.Dense(units=768),
keras.layers.BatchNormalization(),
keras.layers.ReLU(),
keras.layers.Dropout(0.2),
keras.layers.Dense(units=128),
keras.layers.BatchNormalization(),
keras.layers.ReLU(),
keras.layers.Dropout(0.2),
keras.layers.Dense(units=5, activation='softmax')
])
self.model.compile(optimizer='adam',
loss=self.conditional_loss,
metrics=[self.conditional_loss,
keras.metrics.sparse_categorical_accuracy]
)
self.model.fit(
self.train_dataset,
epochs=10,
validation_data=self.test_dataset,
callbacks=[tensorboard_callback, model_callback],
)
如果我在 conditional_loss
中打印 y_true
,TF 会打印一个非热切张量。
Tensor("metrics/conditional_loss/Cast:0", shape=(None, 1), dtype=float32)
如果我构建自己的 keras.Model()
,我可以使用参数 dynamic=True
调用它以启用即时执行。 (Reference)。在 keras.Sequential()
中存在一种方法吗?
为此,您必须使用参数 run_eagerly=True
调用 model.compile()
。以下问题示例:
self.model.compile(optimizer='adam',
loss=self.conditional_loss,
metrics=[self.conditional_loss,
keras.metrics.sparse_categorical_accuracy],
run_eagerly=True
)
我想使用 TF2 的急切执行以 "pythonic" 的方式构建损失,但即使在急切模式下,Keras 也会传递非急切张量。
代码:
def conditional_loss(self, y_true, y_pred):
print(y_true)
return 0
def define_model(self):
self.model = keras.Sequential([
keras.layers.Dense(units=768),
keras.layers.BatchNormalization(),
keras.layers.ReLU(),
keras.layers.Dropout(0.2),
keras.layers.Dense(units=128),
keras.layers.BatchNormalization(),
keras.layers.ReLU(),
keras.layers.Dropout(0.2),
keras.layers.Dense(units=5, activation='softmax')
])
self.model.compile(optimizer='adam',
loss=self.conditional_loss,
metrics=[self.conditional_loss,
keras.metrics.sparse_categorical_accuracy]
)
self.model.fit(
self.train_dataset,
epochs=10,
validation_data=self.test_dataset,
callbacks=[tensorboard_callback, model_callback],
)
如果我在 conditional_loss
中打印 y_true
,TF 会打印一个非热切张量。
Tensor("metrics/conditional_loss/Cast:0", shape=(None, 1), dtype=float32)
如果我构建自己的 keras.Model()
,我可以使用参数 dynamic=True
调用它以启用即时执行。 (Reference)。在 keras.Sequential()
中存在一种方法吗?
为此,您必须使用参数 run_eagerly=True
调用 model.compile()
。以下问题示例:
self.model.compile(optimizer='adam',
loss=self.conditional_loss,
metrics=[self.conditional_loss,
keras.metrics.sparse_categorical_accuracy],
run_eagerly=True
)