神经网络的搭建及参数概述

在这里插入图片描述
我们知道基于Tensorflow的NN(Neural Network,神经网络):用张量表示数据,用计算图搭建神经网络,用会话执行计算图,再优化线上的权重(参数),得到模型。大致分为四个步骤:
(1)准备数据,提取特征;
(2)前向传播,即搭建模型计算过程,定义从输入层到输出层的计算;
(3)反向传播,训练模型参数,迭代优化使损失函数降到最小;
(4)在测试集或验证集上,评估模型性能,训练好模型用以分类或预测。

首先达成一个共识,一般我们说神经网络的参数,即指神经元线上的权重w,用变量(Variable,需要长期保存,同时不断迭代更新的值)表示,通常让w等于tf.Variable()先随机生成。常用生成随机数方法如下:


w=tf.Variable(tf.random_normal([3,2],steddv=2,mean=0,seed=1))

生成正态分布随机数,形状为3行2列,标准差为2,均值为0,随机种子时1;


w=tf.Variable(tf.truncated_normal([3,2],steddv=1,mean=0,seed=1))

生成去掉过大偏离点的正态分布随机数,如果随机出来的数据偏离均值超过1个标准差,数据将会重新生成;


w=tf.Variable(tf.random_uniform([3,2],minval=0,maxval=1,dtype=tf.int32,seed=1))

生成一个均匀分布的随机数,在[0,1)之间随机采样;


tf.zeros()生成全0 数组;
tf.ones()生成全1数组;
tf.fill()生成全定值数组;
tf.constant()生成直接给定值得数组

根据上面搭建神经网络四个步骤,我们来看一下tensorflow在其中的描述:
(1)准备数据,提取特征
这一般属于数据预处理过程,通过收集数据集,将数据处理成我们需要的形式;

(2)前向传播,即搭建模型计算过程,定义从输入层到输出层的计算
变量初始化、计算图节点运算用会话(Session)实现


with tf.Session() as sess:
sess.run()

参数详解:
tf.Session(target,graph,config)
target(可选):指定连接的执行引擎,绝大多数程序中使用默认空字符串,不为空时,多用在分布式环境中。
graph(可选):指定要在Session对象中参与计算的图,默认为None,使用默认图。
config(可选):辅助配置Session对象所需的参数。

sess.run(fetchs,feed_dict=None,options=none,run_metadata=None)
fetchs:从数据流图中接收任意数据流图元素
feed_dict(可选):给数据流图提供运行时数据,键值对形式。

我们可传入tf.global_variables_initializer() ,表示所有参数初始化,如下:


with tf.Session() as sess:
   init_op=tf.global_variables_initializer()  
   sess.run(init_op)

使用占位符,提前占据数据流图的对应位置tf.placeholder(),可有效维护数据流图的完整性,运行时再动态的给占位符提供数据。这个很好理解,比如你在图书馆占座,你先拿本书压在那里上占一个座位,这个位置暂时没人,但后面会有人来,这本书就好比一个占位符。

参数详解:
tf.placeholder(dtype,shape=None,name=None)
dtype(必须):指定占位符的类型,可有效避免类型不匹配而出现错误
shape(可选):指定要传入tensor对象的数据维度,默认为None,即接受任意形状。
Name(可选):给占位符指定一个名称标识符


 x=tf.placeholder(tf.float32,[None,784])  
 y_=tf.placeholder(tf.float32,[None,10])

(3)反向传播,训练模型参数,迭代优化使损失函数降到最小;
损失函数(loss):衡量预测值y_与真实值y之间的差距,这里使用均方误差(MSE)。

Loss_mse=tf.reduce_mean(tf.squre(y_-y))
tf.square() 求平方
tf.reduce_mean()求平均值

训练方式:以减小loss为优化目标,梯度下降、momentum优化器、adam优化器等方法。


rain_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

使用梯度下降算法,让参数沿着梯度的反方向,沿损失减小的方向移动,实现参数更新。


train_step=tf.train.MomentumOptimizer(learning_rate,momentum).minimize(loss)

冲量梯度下降算法,在更新参数时,利用了超参,加了一个冲量momentum,一般取接近1的值,如0.9。相比于原始梯度下降,可有助于加速收敛。当梯度与冲量方向一致时,冲量项增加,相反时,冲量项减少,可以减少训练的震荡过程。


train_step=tf.train.AdamOptimizer(learning_rate,beta1,beta2,epsilon).minimize(loss)

自适应学习率优化算法,相比momentum算法,学习速率是自适应的,可以看作是momentum和rmsprop(一种梯度下降算法,adagrad的改进)的结合。

learning_rate:学习率,在梯度下降中,这是一个很重要的超参数。如果选择的过大,训练可能不收敛,直接发散了;如果设置的过小,训练时间可以会花费太久,通常我们会选取较小的值,如0.01、0.001。

(4)在测试集或验证集上,评估模型性能,训练好模型用以分类或预测。
这里以准确率(accuracy,测试正确数与测试总个数之间的比值)来评估模型性能为例:


correct_prediction=tf.equal(tf.argmax(input1,1),tf.argmax(input2,1))

通常tf.argmax(input1,1)表示在axis=1方向上,input1为模型预测值标签;tf.argmax(input2,1),在axis=1方向上,input2为模型真实值标签

参数详解:
tf.argmax(input,axis=None,dimension=None,output_type=tf.int64)对矩阵按行或列计算最大值,输出最大值的下标
input:输入Tensor
axis:0表示按列,1表示按行
name:名称
dimension:和axis功能一样,默认axis取值优先。


accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

参数详解:
tf.cast(x,dtype,name=None)强制类型转换
x:待转换的Tensor
dtype:将被转换的类型
tf.reduce_mean()计算均值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值