文章字数:1639,阅读全文大约需要6分钟
神经网络参数与Tensorflow变量
tf.Variable
作用是保存和更新神经网络中的参数
1 | #声明2 X 3的矩阵变量,元素均值为0,标准差为2的随机数 |
其它生成器
函数 | 随机数分布 | 主要参数 |
---|---|---|
tf.random_normal | 正太分布 | 平均值、标准差、取值类型 |
tf.truncated_normal | 正太分布,但如果随机出来的值偏离平均值超过2个标准差,那么值会重新随机 | 平均值、标准差、取值类型 |
tf.random_uniform | 拼接分布 | 最小、最大取值,取值类型 |
tf.random_gamma | Gamma分布 | 形状参数alpha、尺度参数beta、取值类型 |
使用常数初始化
函数名 | 功能 | 样例 |
---|---|---|
tf.zeros | 产生全0的数组 | tf.zeros([2,3], int32) -> [[0,0,0], [0,0,0]] |
tf.ones | 产生全1的数组 | tf.ones([2,3], int32) ->[[1,1,1], [1,1,1]] |
tf.fill | 产生指定数字的数组 | tf.fill([2,3], 9) -> [[9,9,9], [9,9,9]] |
tf.constant | 给定值的 | tf.constant([1,2,3]) -> [1,2,3] |
变量使用的例子
1 | import tensorflow as tf |
变量和张量的区别
tf.Variable
是一个运算,运算的结果也是一个张量,变量本质是特殊的张量tf.Variable
里包含的就是一个张量tf.constant
声明的是一个常量,tf.Variable
是变量,后续会进行模型参数调整tf.Variable
会加入到GraphKeys.VARIABLES
中,trainable
参数可以区分优化参数(神经网络参数)和其它参数(迭代参数)
训练神经网络
1 | import tensorflow as tf |
上面的是运行一个神经网络的代码,输入feed_dict根据神经网络运算得出结果。
神经网络可以通过大量样本调整变量的值,以提高预测结果准确性。
交叉熵和反向传播
- 交叉熵:用于表示预测值和实际值差距的值,通过特定公式得出
- 反向传播:根据交叉熵反向调整神经网络参数的过程
1 | #使用sigmoid函数将y转换为0~1之间的数值,转换后y代表预测是正样本的概率 |
Tensorflow提供的优化算法有10种,常用的有:tf.train.GradientDescentOptimizer, tf.train.AdamOptimizer, tf.train.MomentumOptimizer。定义反向传播之后,通过运行sess.run(train_step)就可以对所有在GraphKeys.TRAINABLE_VARIABLES集合中的变量来进行优化,使当前batch下损失函数更小。
完整神经网络
1 | import tensorflow as tf |
1 | parameter w1 before train: [[-0.8113182 1.4845988 0.06532937] |
clip_by_value
- 可以将一个张量中的数值限制在一个范围之内。(可以避免一些运算错误:可以保证在进行log运算时,不会出现log0这样的错误或者大于1的概率)
tf.clip_by_value(1-y,1e-10,1.0)
交叉熵
主要有两个表达式
- 二分类(预测的结果只有两种,0/1)
yi
表示样本i的label,正类为1,负类为0pi
表示样本i预测为正的概率
- 多分类
M
类别的数量yic
指示变量(0或1),如果该类别和样本i的类别相同就是1,否则是0;pic
对于观测样本i属于类别c的预测概率。