此文只是记录本人在运行吴恩达深度学习作业时,我用的Python包和作业版本不同,导致作业中一些老版本的功能在新版本中去掉了就报错。我在网上搜集了一下解决办法,汇总了方便下次遇到又得搜好久,所以算不得原创,如果以后遇到新问题了再更新一下加进去。
这两个问题基本都是同时出现的
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
这个问题是近期刚遇到的,是因为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:
这个也是因为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,但是在后面的运行结果里,和原作业的结果有一点不太一样, 不知道是不是这个引起的
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吧