multinet kittibox 代码运行踩坑记录
写在前边
因为我的环境是tensorflow2.1,所以有不少的错误,再次记录一下。
因为有些错误与我之前运行 kittiseg 代码相同在此可以移步 此处
1. 权重路径错误
在demo.py文件夹下,创建DATA文件夹,在DATA文件夹里放入vgg16.npy,创建weight文件夹也放入vgg16.npy。
2. AttributeError: ‘module’ object has no attribute ‘Print’
#import tensorflow as tf
import tensorflow.compat.v1 as tf
3.AttributeError: ‘module’ object has no attribute ‘contrib’
(1) he_init = tf.contrib.layers.variance_scaling_initializer() 这句报错
#he_init = tf.contrib.layers.variance_scaling_initializer()
he_init = tf.variance_scaling_initializer()
(2)l2_regularizer = tf.contrib.layers.l2_regularizer(hypes[‘wd’]) 这句报错
#l2_regularizer = tf.contrib.layers.l2_regularizer(hypes['wd'])
l2_regularizer = tf.keras.regularizers.l2(hypes['wd']
tf.contrib.layers.l2_regularizer()用
regularizer = tf.keras.regularizers.l2()代替https://blog.csdn.net/wun123/article/details/108278113
参考
4.TypeError: init() got an unexpected keyword argument ‘factor’
#he_init4 = tf.contrib.layers.variance_scaling_initializer(factor=2.0*sd*sd)
he_init4 = tf.variance_scaling_initializer(scale=2.0*sd*sd)
这里边是两个函数的参数不一样,在此列举一下:
(1)tf.contrib.layers.variance_scaling_initializer()https://www.cnblogs.com/xc90/articles/9377578.html
参考
variance_scaling_initializer(
factor=2.0,
mode='FAN_IN',
uniform=False,
seed=None,
dtype=tf.float32
)
(2)tf.variance_scaling_initializer()参考https://www.cnblogs.com/jfdwd/p/11184117.html
tf.variance_scaling_initializer()
可简写为tf.VarianceScaling()
参数为(scale=1.0,mode="fan_in",distribution="normal",seed=None,dtype=dtypes.float32)
scale: 缩放尺度(正浮点数)
mode: "fan_in", "fan_out", "fan_avg"中的一个,用于计算标准差stddev的值。
distribution:分布类型,"normal"或“uniform"中的一个。
当 distribution="normal" 的时候,生成truncated normal distribution(截断正态分布) 的随机数,其中stddev = sqrt(scale / n) ,n的计算与mode参数有关。
如果mode = "fan_in", n为输入单元的结点数;
如果mode = "fan_out",n为输出单元的结点数;
如果mode = "fan_avg",n为输入和输出单元结点数的平均值。
当distribution="uniform”的时候 ,生成均匀分布的随机数,假设分布区间为[-limit, limit],则
limit = sqrt(3 * scale / n)
我改了factor为scale,运行成功了,不过原理不了解,不知道是不是一样的参数,大佬请留言解惑!
5. RuntimeError: tf.placeholder() is not compatible with eager execution.
参考:https://blog.csdn.net/weixin_43763859/article/details/104537392
这是因为在运行**tf.compat.v1.placeholder(dtype, shape = None, name = None)**的时候急切执行了这条语句,但是我们一般都是在一个Session前先去定义placeholder,但是不会去执行,然后再在Sesion上下文管理器中去传入我们的数据,然后执行。
这里给出一个方法(对我有效)
在代码中添加这样一句:
import tensorflow as tf
import numpy as np
tf.compat.v1.disable_eager_execution()