吴恩达深度学习作业中因版本不同导致的一些报错问题

此文只是记录本人在运行吴恩达深度学习作业时,我用的Python包和作业版本不同,导致作业中一些老版本的功能在新版本中去掉了就报错。我在网上搜集了一下解决办法,汇总了方便下次遇到又得搜好久,所以算不得原创,如果以后遇到新问题了再更新一下加进去。

1. module ‘scipy.ndimage’ has no attribute 'imread’和module ‘scipy.misc’ has no attribute ‘imresize’

产生原因

这两个问题基本都是同时出现的

my_image = "thumbs_up.jpg"

# We preprocess your image to fit your algorithm.
fname = my_image
image = np.array(ndimage.imread(fname, flatten=False))  # 这儿
my_image = scipy.misc.imresize(image, size=(64,64)).reshape((1, 64*64*3)).T   # 和这儿
my_image_prediction = predict(my_image, parameters)

此时是想要重新设置图片的尺寸,但是有如下两条报错(两条报错并不是同时报出来的,只是这一段代码会引发这两条)

module 'scipy.ndimage' has no attribute 'imread
module 'scipy.misc' has no attribute 'imresize'

解决方法

我也是在做这作业(只是抄过来运行了一下)的时候才第一回用到scipy这个库,所以产生原因我也不清楚,也是好久前在网上找的解决方法,现在只是想把它总结出来,方便下回用。将其中那两行替换成这个

image = np.array(plt.imread(fname))
my_image = np.array(Image.fromarray(image).resize((64,64))).reshape((1, 64*64*3)).T

2. module ‘tensorflow’ has no attribute ‘Session’

产生原因

这个问题是近期刚遇到的,是因为tensorflow 2.x版本里面去掉了好多1.x里的功能,导致频频报错。
包括以下几个类似的错误

module 'tensorflow' has no attribute 'global_variables_initializer'
module 'tensorflow' has no attribute 'placeholder'
module 'tensorflow' has no attribute 'set_random_seed'
module 'tensorflow' has no attribute 'Session'

解决办法

解决办法基本都是一样的
就是在中间加上.compat.v1.,比如像下面这样

x = tf.compat.v1.placeholder(tf.int64, name = 'x')
init = tf.compat.v1.global_variables_initializer()  
tf.compat.v1.set_random_seed(1) 
with tf.compat.v1.Session() as session:

3. module ‘tensorflow’ has no attribute ‘contrib’

产生原因

这个也是因为tensorflow 2.x版本里面去掉了这个contrib,网上也试了一些方法,只有这个解决了

W1 = tf.compat.v1.get_variable("W1", [25,12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))

解决办法

这个时候就不能再添加.compat.v1了,不然又会报新的错
可以替换成这样

W1 = tf.compat.v1.get_variable("W1", [25,12288], initializer = tf.initializers.GlorotUniform(seed = 1))  

至于这个方法和作业中的有啥区别我也不太清楚,毕竟也是第一次用tensorflow,但是在后面的运行结果里,和原作业的结果有一点不太一样, 不知道是不是这个引起的

4.module ‘tensorflow._api.v2.train’ has no attribute ‘AdamOptimizer’

产生原因

optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)  

解决方法

也是在中间添加一个这.compat.v1,但是运行结果和原作业的不太一样,有可能是上一步的问题。

optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)  

算了,越到后面发现不一样的越多,也没找到解决办法,我屈服了,还是装回tensorflow1.14吧

你可能感兴趣的:(深度学习,tensorflow,人工智能,bug)