“编译”时如何在急切模式下执行TensoFlow 2 Keras顺序模型?

我想使用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.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],)

如果我在y_true中打印conditional_loss,则TF将打印非急张量。

Tensor("metrics/conditional_loss/Cast:0",shape=(None,1),dtype=float32)

如果我构建自己的keras.Model(),则可以使用参数dynamic=True对其进行调用,以启用急切执行。 (Reference)。在keras.Sequential()中存在一种实现方法?

aappww 回答:“编译”时如何在急切模式下执行TensoFlow 2 Keras顺序模型?

为此,您必须使用参数model.compile()调用run_eagerly=True。遵循问题示例:

self.model.compile(optimizer='adam',loss=self.conditional_loss,metrics=[self.conditional_loss,keras.metrics.sparse_categorical_accuracy],run_eagerly=True
                           )
本文链接:https://www.f2er.com/3150088.html

大家都在问