tensorlfow反向传播算法


import tensorflow as tf


w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))

x = tf.placeholder(tf.float32, shape=(1, 2), name="input")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input')

a = tf.matmul(x, w1)
y = tf.matmul(a, w2)


# 损失函数及反向传播算法
y = tf.sigmoid(y)

cross_entropy = -tf.reduce_mean(
    y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))
    + (1 - y_)* tf.log(tf.clip_by_value(1-y, 1e-10, 1-0)))

learning_rate = 0.001

train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)

tf.sigmoid()函数是将y转换为0~1之间的值,转换后的y代表预测是正样本概率,1-y代表与预测是负样本概率,这是神经网络中常用的激活函数之一。激活函数作用之一就是去线性化,使得层与层结点间不在是简单的加权求和,在加权和的基础上还做了一个非线性变化。
常用的激活函数还有:
ReLU
sigmoid
tanh

cross_entropy定义了真实值和预测值之间的交叉熵,是分类问题中一个常用的损失函数(推荐吴恩达的机器学习的课里面讲的比较透彻)。
损失函数(交叉熵)H(p, q)刻画的是通过概率分布q来表达概率分布p的困难程度。因为正确答案是希望的结果,p代表的是正确结果,q代表的是预测值,交叉熵的值越小两个概率分布越接近。

tf.clip_by_value函数可以将一个张量中的数值限制在一个范围内,可以避免一些运算错误(如log0)

tf.log即是log函数不过参数传入的是tf的变量(矩阵)

tf.reduce_mean函数对整个矩阵做平均(所有元素之和取平均)

learning_rate定义学习率

train_step定义反向传播的优化方法,tf支持10种不同的优化方法,其中较常用的3种为:
tf.train.GradientDescentOptimizer
tf.train.AdamOptimizer
tf.train.MomentumOptimizer

最后通过sess.run(train_step)就可以对所有训练数据集中的变量进行优化,使得在当前batch下损失函数更小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值