深度学习-2:TensorFlow 神经网络构建与优化

1. 神经网络解决问题的基本步骤

基本步骤列举如下:

  • 提取问题中实体的特征向量作为神经网络的输入(特征工程)。
  • 定义神经网络的结构,及如何从输入得到输出(前向传播算法)。
  • 通过训练数据调整神经网络中参数的取值(优化算法)。
  • 利用训练好的神经网络预测未知的数据(在未知数据上使用前向传播算法)。
1.1 前向传播算法

1.1.1 所需信息

  • 神经网络的输入。
  • 神经网络的连接结构。
  • 每个神经元中的参数。

对于一个没有激活函数的三层(输入层、一个隐藏层、输出层)的简单神经网络而言:
前向传播过程则为:

#第一层的结果为 input 点乘【输入层到隐藏层的参数 weights1】
layer1=tf.matmul(input,weights1)
#输出层的结果为 layer1 点乘【隐藏层到输出层的参数weights2】
output_value=tf.matmul(layer1,weights2)

由于线性模型的任意组合仍然为线性模型,因此该简单神经网络等价于:

output_value=tf.matmul(input,tf.matmul(weights1,weights2))
#==output_value=tf.matmul(input,weights3)

因此需要去线性,才可以使隐藏层有意义,进而解决线性不可分问题。
去线性需要激活函数。

1.1.2 激活函数及偏置项

对每个节点的输出在加权和的基础上做一个非线性变换。
可用的非线性变换主要有三:

  • relu:f(x)=max(x, 0)
  • sigmoid:f(x)=1/(1+e^(-x))
  • tanh:f(x)=(1-e^(-2x))/(1+e ^(-2x))

对于一个激活函数为 relu 的三层(输入层、一个隐藏层、输出层)的简单神经网络而言,前向传播过程则为:

#第一层的结果为 input 点乘【输入层到隐藏层的参数 weights1】
layer1=tf.nn.relu(tf.matmul(input,weights1)+biases1)
#输出层的结果为 layer1 点乘【隐藏层到输出层的参数weights2】
output_value=tf.nn.relu(tf.matmul(layer1,weights2)+biases2)

1.1.3 多分类问题的网络结构

  • 对于多分类问题,通常为设置 n 个输出节点,得到一个 n 维数组作为输出结果。其中 n 为类别的个数。
  • 可利用Softmax回归将神经网络的输出变为一个概率分布。
    Softmax(y)=e^ y/(add_all(e^y))

1.1.4 回归问题的网络结构

回归问题需要预测出一个任意实数,因此只有一个输出节点。该输出节点的输出值即为预测值。

1.2 优化算法

优化的思想为寻找一组参数,使得损失函数最小化。

1.2.1 损失函数

(1)分类问题的损失函数

使用交叉熵函数。交叉熵刻画两个概率分布之间的距离,表示通过概率分布 q (predicted) 表达概率分布 p (true) 的难度。可求出Softmax回归后得到的输出 Softmax(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值