第一种方法 采用compat.v1再修改
博主采用的环境是tf-gpu2.0.0
Github程序应该是比较老的tf1超早期版本。在采用了
import tensorflow.compat.v1 as tf
之后依旧出现与tf.contrib相关的属性缺失的问题。原因在于tf版本的不匹配。
主要有以下汇总:
tf.contrib.rnn.BasicLSTMCell
改为 tf.nn.rnn_cell.BasicLSTMCell
tf.contrib.rnn.MultiRNNCell
改为 tf.nn.rnn_cell.MultiRNNCell
tf.contrib.rnn.static_rnn
改为 tf.nn.static_rnn
RuntimeError: tf.placeholder() is not compatible with eager execution.
改动方式:在import tensorflow.compat.v1 as tf
之后添加一句tf.disable_eager_execution()
用来关闭紧急执行。
附上Debug结束代码:
final test accuracy: 0.8690193295478821
best epoch's test accuracy: 0.9046487808227539
第二种方法直接在TF2环境修改
那么可能有人会问:我不想用compat.v1,就想单单用tf2,怎么改。我在Debug的过程中,pycharm也给我了相关的Warning提示:
WARNING:tensorflow:///py:59: BasicLSTMCell.__init__ (from tensorflow.python.ops.rnn_cell_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This class is equivalent as tf.keras.layers.LSTMCell, and will be replaced by that in Tensorflow 2.0.
WARNING:tensorflow:///.py:61: MultiRNNCell.__init__ (from tensorflow.python.ops.rnn_cell_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This class is equivalent as tf.keras.layers.StackedRNNCells, and will be replaced by that in Tensorflow 2.0.
WARNING:tensorflow:///.py:63: static_rnn (from tensorflow.python.ops.rnn) is deprecated and will be removed in a future version.
Instructions for updating:
Please use `keras.layers.RNN(cell, unroll=True)`, which is equivalent to this API
WARNING:tensorflow:From E:\anaconda3\envs\tf2_gpu\lib\site-packages\tensorflow_core\python\ops\rnn_cell_impl.py:735: Layer.add_variable (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.
Instructions for updating:
Please use `layer.add_weight` method instead.
WARNING:tensorflow:From E:\anaconda3\envs\tf2_gpu\lib\site-packages\tensorflow_core\python\ops\rnn_cell_impl.py:739: calling Zeros.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor
(128,)
WARNING:tensorflow:///.py:142: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Future major versions of TensorFlow will allow gradients to flow
into the labels input on backprop by default.
See `tf.nn.softmax_cross_entropy_with_logits_v2`.
可以尝试在tf2中采用上面代码块中的替换。
具体如下:
tf.contrib.rnn.BasicLSTMCell
改为 tf.keras.layers.LSTMCell
tf.contrib.rnn.MultiRNNCell
改为 tf.keras.layers.StackedRNNCells
tf.contrib.rnn.static_rnn
改为 keras.layers.RNN(cell, unroll=True)