我是靠谱客的博主 粗犷缘分,最近开发中收集的这篇文章主要介绍深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

博主 撸的  该节 代码 地址 :https://github.com/LemonTree1994/machine-learning/blob/master/%E5%90%B4%E6%81%A9%E8%BE%BE%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/Untitled%20Folder%202/Untitled%20Folder%203/tf_tutorial.ipynb

博主参考的大牛(CSDN  何宽)的实践 :https://blog.csdn.net/u013733326/article/details/79971488

实践中遇到的坑:

1. 计算loss

zt = tf.transpose(z3)
yt = tf.transpose(y)

# 使用一行一个数据

loss = tf.nn.softmax_cross_entropy_with_logits_v2(logits=zt,labels=yt)
loss = tf.reduce_mean(loss)

吴恩达教学视频中的数据shape 均为(feature_number,data_num),也就是理解为一列一条数据 。

tf.nn.softmax_cross_entropy_with_logits_v2

则是按照一行视为一条数据进行softmax运算,然后计算每行的损失。

因此需要将z3和y进行transpose()转置

2. 初始化参数

在博主参考的文档中,其使用以下代码和进行说明

 

    初始化tensorflow中的参数,我们将使用Xavier初始化权重和用零来初始化偏差,比如:

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

    tf.Variable() 每次都在创建新对象,对于get_variable()来说,对于已经创建的变量对象,就把那个对象返回,如果没有创建变量对象的话,就创建一个新的。

 

而博主 只是想简单的随机化生成一个规定shape的矩阵,于是入了坑

w1 = tf.Variable(tf.random_normal([20,12288],mean=0.0,stddev=0.01,dtype=tf.float32))
b1 = tf.Variable(tf.zeros([20,1]))
a1 = tf.nn.relu(tf.matmul(w1,x)+b1)

在一开始,博主傻乎乎的直接随机化了一个标准正太分布,结果训练结果非常不如人意,训练loss 刚开始为300多 然后骤降到1.x而后保证基本不变动。

训练结果预测均为某一个固定的类别。 找了n多原因等等,都没有作用。

 

最后 不知道脑子哪里反应过来了 发现w初始值太大。

可能是想起来前面的实践中 参数初始化的三种方式:

0初始化, 随机初始化,He初始化

其中随机初始化 也是标准正太分布的随机数值,但是吴大大在后面加上了*0.01 来使其逼近于0。

博主的学习笔记这样记录的:

  w初始化为0,会导致隐层单元一致,对称,计算完全相同。

  w初始化很大,z很大,梯度小,收敛慢。

所以应将参数初始化为一个很小的非0值,使用标准正太分布*0.01满足要求。

 

于是,博主将所有w的随机值均缩小了100倍,修改如上面代码中红色字体部分,之后算法训练完成后性能表现还可以,

在该超参数下learning_rate=0.001,网络层和单元数= [12288,20,11,6],优化算法Adam,epoch=1500,

loss从1.7 慢慢降低到0.07

训练集准确率达到98%,测试集81%。

 

参数初始化影响很大,一定不要忘了将参数初始化的值逼近于0。

 

博主的理解就是这样,如果有大佬发现不对的地方请及时指正。

 

 

一个最基本的深度神经网络就能达到这种程度,期待接下来的cnn。

 

转载于:https://www.cnblogs.com/weiwuxian/p/11443906.html

最后

以上就是粗犷缘分为你收集整理的深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响的全部内容,希望文章能够帮你解决深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部