0

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],
        )

TF で印刷すると、熱心でないテンソルが印刷y_trueされます。conditional_loss

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

独自にビルドする場合keras.Model()は、引数を使用して呼び出して、dynamic=True熱心な実行を有効にすることができます。(参照)。でそれを行う方法はありkeras.Sequential()ますか?

4

1 に答える 1

3

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
                           )
于 2019-11-06T17:28:19.687 に答える