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 [<tf.Tensor 'my_rnn/lstm_cell/cond/Identity:0' shape=(None, 100) dtype=float32>, <tf.Tensor 'my_rnn/lstm_cell_1/cond/Identity:0' shape=(128, 64) dtype=float32>]

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

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

 

 

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值