📅  最后修改于: 2023-12-03 15:17:40.563000             🧑  作者: Mango
当我们在使用 TensorFlow 时,有时会遇到这样的错误:ModuleNotFoundError: No module named 'tensorflow.contrib'
。这个错误通常发生在使用 TensorFlow 2.x 版本的时候,因为 TensorFlow 2.x 已经移除了 contrib 模块。所以,假如你的代码中有 import tensorflow.contrib 的话,就会报出这个错误。
那么怎么解决这个错误呢?以下提供两种可能的解决方案:
因为 TensorFlow 兼容性模块中包含了 contrib 的相关内容,所以我们可以通过将代码中的 tensorflow.contrib
换成 tensorflow.compat.v1
来解决该问题。
例如,以下代码:
import tensorflow as tf
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
应该修改为:
import tensorflow.compat.v1 as tf
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
除了修改代码,我们也可以将 TensorFlow 降级到 1.x 版本,这样也可以避免出现该错误。
例如,针对 Linux系统:
!pip uninstall tensorflow
!pip install tensorflow==1.15
对于 Windows系统:
!pip uninstall tensorflow
!pip install tensorflow==1.15 -i https://pypi.tuna.tsinghua.edu.cn/simple/
总之,以上两种方案可以解决 "ModuleNotFoundError: No module named 'tensorflow.contrib'" 错误。