TensorFlow 2.x调试错误解决:_SymbolicException: Inputs to eager execution function cannot be Keras symbolic

出现的这样错误:

调试TensorFlow 2.0 程序时,发现错误如下:

_SymbolicException: Inputs to eager execution function cannot be Keras symbolic tensors, but found [, ]

查阅资料发现的一种解决方案:

Keras在编译模型阶段,区分训练状态和非训练状态,二者的逻辑是不一样的。比如说,模型使用了Dropout,在训练时要随机失活部分神经元,而在正式运行(模型已经训练完毕后,在运行时),所有神经元都要保留的。

如果是训练状态,则在编译参数里增加一个选项即可:experimental_run_tf_function = False

  

training = True  #设置一个布尔量,根据不同情况,调用不同的模型编译(装配)

 if training:    #
        # 装配
        model.compile(optimizer = optimizers.RMSprop(0.001),
                      loss = losses.BinaryCrossentropy(),
                      metrics=['accuracy'],
                      experimental_run_tf_function = False
                      )
    else:
        # 装配
        model.compile(optimizer = optimizers.RMSprop(0.001),
          loss = losses.BinaryCrossentropy(),
          metrics=['accuracy']
          )

设置之后,模型就可以运行了。

x_train shape: (25000, 80) tf.Tensor(1, shape=(), dtype=int64) tf.Tensor(0, shape=(), dtype=int64)

x_test shape: (25000, 80)

Epoch 1/50

194/195 [============================>.] - ETA: 0s - loss: 0.5002 - accuracy: 0.6656 Epoch 1/50

195/195 [==============================] - 6s 31ms/step - loss: 0.3957 - accuracy: 0.8240

 

 

你可能感兴趣的:(深度学习之美,Python学习,TensorFlow学习笔记)