您的位置:首页 > 其它

修改版Alexnet模型训练CIFAR10数据集程序的总结

2017-05-27 17:16 471 查看

关于CIFAR10程序的一些经验总结

在卷积层和全连接层中,设置权重和偏置时,推荐使用
tf.get_variable()
函数,好处是参数可重复使用,减小内存的占用,而且如果是导入别人的参数进行训练时,必须使用
tf.get_variable()


为了用
tensorboard
画出图来,在给每一层命名时,通常采用
with tf.variable_scope('名字') as scope
tf.name_scope,区别在于:
tf.variable_scope
在每个参数前加一个前缀,使得参数独一无二,故与
tf.get_variable()
搭配使用,取得很好地效果;
tf.name_scope
没有在参数前加前缀,一般用于节点处的命名。

在对权重初始化时,使用初始化函数
tf.contrib.layers.xavier_initialize()
比较好,默认采用均值初始化,还有可选参数,可根据需要进行设置。常用的还有
tf.truncated_normal_initializer(有参数)
;对偏置初始化一般采用
tf.constant_initializer(有参数)


批量输入图片时,要对图片进行归一化
tf.nn.batch_normalization()
,原理为:

γ(x−μ)σ+β

归一化输入向量在机器学习中是一个通用的方法,如果不归一化将导致结果会严重被具有大方差的特征和不同的尺度影响。归一化输入能够帮助数值最优方法(例如,梯度下降法)更快,更准确地收敛。

卷积核的大小使用3x3会比较好,但是得视电脑性能而定,batch_size同样也是。

计算loss时,若使用
tf.nn.softmax_ceoss_entrocy_with_logits()
,则必须进行one_hot,(但是使用这种方法时,在我的电脑上导致
tf.nn.in_top_k()
函数使用出错);另一种方法是使用
tf.nn.sparse_softmax_cross_entropy_with_logits()
,方便,效果也不错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐