通过TensorFlow训练神经网络模型
神经网络模型的训练过程其实质上就是神经网络参数的设置过程
在神经网络优化算法中最常用的方法是反向传播算法,下图是反向传播算法流程图:

从上图可知,反向传播算法实现了一个迭代的过程,在每次迭代的开始,先需要选取一小部分训练数据,这一小部分数据叫做一个batch。然后这一个batch会通过前向传播算法得到神经网络的预测结果。计算出当前神经网络的预测答案与正确答案之间的差距(有监督学习,在训练时有一个标注好的数据集),最后根据预测值和真实值之间的差距,反向传播算法会相应的更新神经网络参数的取值,使在这个batch上神经网络模型的预测结果更接近真实答案。
通过TensorFlow实现反向传播算法的第一步是使用TensorFlow表达一个batch数据,但如果每轮迭代中选取的数据都通过常量来表示,会导致TensorFlow的计算图非常大。因为每生成一个常量,TensorFlow都会在计算图中增加一个节点。一般来书一个神经网络的训练过程会经过几百万轮甚至上亿轮的迭代,这样就导致计算图非常大,而且利用率低。为了避免这个问题,TensorFlow提供placeholder机制用于提供输入数据。placeholder相当于定义了一个位置,这个位置中的数据在程序运行时再指定,这样在程序中就不需要生成大量常量来提供输入数据,而只需要将数据通过placeholder传入TensorFlow计算图。在placeholder定义时,需要指定数据类型。下面程序是通过placeholder实现前向传播算法。
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)) # 定义placeholder作为存放数据的地方。这里的维度不一定要定义,
# 但如果维度是确定的,给出维度会降低出错的概率
x = tf.placeholder(tf.float32, shape=(1, 2), name="input") # 通过前项传播算法得到神经网络的输出
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
# 定义会话
sess = tf.Session()
# 定义初始化变量
init_op = tf.global_variables_initializer()
sess.run(init_op)
sess.run(w2.initializer)
# feed_dict是一个字典,在这个字典中需要给出每个使用placeholder定义变量的取值
print(sess.run(y, feed_dict={x: [[0.7, 0.9]]}))
sess.close()
在上面的程序中输入的是1x2矩阵(shape=(1, 2)),若改为n x 2的矩阵,就可以得到n个前向传播结果
在得到一个batch的前向传播结果后需要定义一个损失函数来刻画当前的预测值和真实答案之间的差距。然后通过反向传播算法来缩小预测值和真实值之间的差距。下面代码定义了一个损失函数,及反向传播算法
# 使用sigmoid函数将y转化为0-1之间的数值,转化后y代表预测正样本的概率,
# 1-y代表预测负样本的概率
y = tf.sigmoid(y)
# 定义损失函数,刻画预测值与真实值之间的差距
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, le-10, 1.0)) +
(1 - y_) * tf.log(tf.clip_by_value(1-y, le-10, 1.0)))
# 定义学习率
LR = 0.001
# 定义反向传播算法优化神经网络参数
train_step = tf.train.AdamOptimizer(LR).minimize(cross_entropy)
通过TensorFlow训练神经网络模型的更多相关文章
- 利用Tensorflow实现神经网络模型
首先看一下神经网络模型,一个比较简单的两层神经. 代码如下: # 定义参数 n_hidden_1 = 256 #第一层神经元 n_hidden_2 = 128 #第二层神经元 n_input = 78 ...
- 手写数字识别 ----卷积神经网络模型官方案例注释(基于Tensorflow,Python)
# 手写数字识别 ----卷积神经网络模型 import os import tensorflow as tf #部分注释来源于 # http://www.cnblogs.com/rgvb178/p/ ...
- 利用Tensorflow实现卷积神经网络模型
首先看一下卷积神经网络模型,如下图: 卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层.全连接层组成,即INPUT-CONV-RELU-POOL-FC池化层:为了减少运算量和数据维度而设置的一 ...
- 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型
初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...
- Tensorflow 对上一节神经网络模型的优化
本节涉及的知识点: 1.在程序中查看变量的取值 2.张量 3.用张量重新组织输入数据 4.简化的神经网络模型 5.标量.多维数组 6.在TensorFlow中查看和设定张量的形态 7.用softmax ...
- Keras结合Keras后端搭建个性化神经网络模型(不用原生Tensorflow)
Keras是基于Tensorflow等底层张量处理库的高级API库.它帮我们实现了一系列经典的神经网络层(全连接层.卷积层.循环层等),以及简洁的迭代模型的接口,让我们能在模型层面写代码,从而不用仔细 ...
- tensorflow 神经网络模型概览;熟悉Eager 模式;
典型神经网络模型:(图片来源:https://github.com/madalinabuzau/tensorflow-eager-tutorials) 保持更新,更多内容请关注 cnblogs.com ...
- 深度学习之TensorFlow构建神经网络层
深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...
- 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec
人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...
随机推荐
- 1503.02531-Distilling the Knowledge in a Neural Network.md
原来交叉熵还有一个tempature,这个tempature有如下的定义: \[ q_i=\frac{e^{z_i/T}}{\sum_j{e^{z_j/T}}} \] 其中T就是tempature,一 ...
- python学习Day10 函数的介绍(定义、组成、使用)
今日学习内容: 1.什么是函数 :函数就是一个含有特定功能的变量,一个解决某问题的工具 函数的定义:通过关键字def + 功能名字():代码体(根据需求撰写代码逻辑) 2.为什么要用函数:可以复用:函 ...
- 在类文件中创建 写入Json文件
由于业务需要 今天写了一个方法能够定时更新Json文件 即定时从数据库中查询数据 然后转化为Json对象 如果有数据的话 删掉之前的Json文件 重新创建一个文件 然后写入Json对象 中间走了很多弯 ...
- 第一次oo博客作业--表达式求导
(1)说实话我这部分真的不知道写些什么,因为我只有第三次作业写了两个类,前两次都是一个类,一个类的好处可能也就是写起来比较方便(不用抽象什么共性了,直接c语言莽过去),缺点很多,架构不清晰,可读性不高 ...
- springboot日志logback配置
<?xml version="1.0" encoding="UTF-8"?> <!-- scan:当此属性设置为true时,配置文件如果发生改 ...
- 学习TestNG,乍暖还寒冷时
时间:2019年2月23日,农历正月十九,星期六,天气晴,略有阳光,但下午三点多就不见阳光了. 地点:上海 昨夜雨疏风骤,浓睡不消残酒.试问卷帘人,却道海棠依旧.知否?知否?应是绿肥红瘦 是的,魔都上 ...
- mybatis动态sql之foreach标签
foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量.它也允许你指定开头与结尾的字符串以及在迭代结果之间放置分隔符.这个元素是很 ...
- 回溯+DFS 强化
1020. 飞地的数量 思路:从4条边界出发,把能遍历到的1全部变成0.剩下的1就是边界所不能到达的点,统计一下1的数量即可. 解题思路:DFS. 时间超越100%python用户提交 ,内存超越8 ...
- 十四、new Comparator<T>实现多重排序结果
1.编写实现类 package com.abcd; public class Person{ private String name; private int age; private int sal ...
- jquery 全选、反选、获取值、背景行、隔行变色和鼠标略过变色变色全特效
好久没有写东西了,当然不是没东西可写,只是没有时间写.今天抽出点时间来把我最近使用的一些 Javascript 特效的东西贴出来,供自己或者别人查询使用.最近我在做一个新的 B/S 系统,由于没有专门 ...