TensorFlow入门(三)——深层神经网络

深层神经网络主要有两个特征:**多层(显然)**和非线性,其优化的目标是由损失函数来定义的

1.非线性变换

由激活函数实现
常用函数:ReLU,sigmoid,tanh函数

2.损失函数

分类问题常用:
交叉熵:给定两个概率分布p和q,用q来表示p的交叉熵:
H ( p , q ) = − Σ p ( x ) l o g q ( x ) H(p,q) = -\varSigma p(x)log q(x) H(p,q)=Σp(x)logq(x)
用来判断预测答案和真实答案间的距离
预测答案:经过非线性变换后的值,即神经网络的输出
真实答案:最终输出层的结果

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)))
#使用softmax回归处理后的交叉熵
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(
labels=y_,logits=y)

未加入前各个函数用法实例如下:

import tensorflow as tf
input1 = tf.constant([[1.0, 2.0, 3.0],[4.0,5.0,6.0]])
input2 = tf.Variable(tf.random_normal([2,3], name="input2"))
with tf.Session() as sess:
    tf.global_variables_initializer
    print(tf.clip_by_value(input1,2.0,5.0).eval())
    print((tf.log(input1).eval()))
    print((input1*input2).eval())
    print(tf.reduce_mean(input1).eval())
输出:
[[2. 2. 3.]
 [4. 5. 5.]]
[[0.        0.6931472 1.0986123]
 [1.3862944 1.609438  1.7917595]]

回归问题常用
均方误差MSE
M S E ( y , y ′ ) = ∑ i = 1 n ( y   i   − y ′ ) n MSE(y,y')=\cfrac{\displaystyle\sum_{i=1}^n(y~i~-y')}{n} MSE(y,y)=ni=1n(y i y)
yi为一个batch中第i个数据的正确答案
y为神经网络给出的预测值
下面是实现:

mse = tf.reduce_mean(tf.square(y_ - y))

2.1

自定义损失函数

以计算商品利润问题为例,当预测值大于真实值,亏损1*(y-y_)元;当预测值小于真实值亏损10*(y_-y)元)。

loss = tf.reduce_sum(tf.where(tf.greater(y, y_), loss_more*(y-y_), loss_less*(y_-y)))

以下为该程序实例:

import tensorflow as tf
from numpy.random import RandomState
#定义数据包大小
batch_size = 8
w1 = tf.Variable(tf.random_normal((2, 1), stddev=2, seed=1))

x = tf.placeholder(tf.float32, shape=[None, 2], name="x_input")
#一个输出节点
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y_input")
y = tf.matmul(x, w1)#由神经网络给出的预测
#定义两种成本
loss_less = 10
loss_more = 1
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), loss_more*(y-y_), loss_less*(y_-y)))
train_step = tf.train.AdamOptimizer(0.001).minimize(loss)
#生成数据集
rdm = RandomState(1)#当调用seed时,无法调用rand方法
data_size = 128
X = rdm.rand(data_size, 2)
#加入了噪声
Y = [[x1 + x2 + rdm.rand()/10.0-0.05] for (x1, x2) in X]
#训练
with tf.Session() as sess:
    ini_op = tf.global_variables_initializer()
    sess.run(ini_op)
    STEPS = 5000
    for i in range(STEPS):
        start = (i * batch_size) % data_size
        end = min(start+batch_size, data_size)
        sess.run(train_step, feed_dict={x: X[start, end], y_: Y[start, end]})
        print(sess.run(w1))


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值