神经网络模型的训练过程其实质上就是神经网络参数的设置过程

在神经网络优化算法中最常用的方法是反向传播算法,下图是反向传播算法流程图:

从上图可知,反向传播算法实现了一个迭代的过程,在每次迭代的开始,先需要选取一小部分训练数据,这一小部分数据叫做一个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训练神经网络模型的更多相关文章

  1. 利用Tensorflow实现神经网络模型

    首先看一下神经网络模型,一个比较简单的两层神经. 代码如下: # 定义参数 n_hidden_1 = 256 #第一层神经元 n_hidden_2 = 128 #第二层神经元 n_input = 78 ...

  2. 手写数字识别 ----卷积神经网络模型官方案例注释(基于Tensorflow,Python)

    # 手写数字识别 ----卷积神经网络模型 import os import tensorflow as tf #部分注释来源于 # http://www.cnblogs.com/rgvb178/p/ ...

  3. 利用Tensorflow实现卷积神经网络模型

    首先看一下卷积神经网络模型,如下图: 卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层.全连接层组成,即INPUT-CONV-RELU-POOL-FC池化层:为了减少运算量和数据维度而设置的一 ...

  4. 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

    初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...

  5. Tensorflow 对上一节神经网络模型的优化

    本节涉及的知识点: 1.在程序中查看变量的取值 2.张量 3.用张量重新组织输入数据 4.简化的神经网络模型 5.标量.多维数组 6.在TensorFlow中查看和设定张量的形态 7.用softmax ...

  6. Keras结合Keras后端搭建个性化神经网络模型(不用原生Tensorflow)

    Keras是基于Tensorflow等底层张量处理库的高级API库.它帮我们实现了一系列经典的神经网络层(全连接层.卷积层.循环层等),以及简洁的迭代模型的接口,让我们能在模型层面写代码,从而不用仔细 ...

  7. tensorflow 神经网络模型概览;熟悉Eager 模式;

    典型神经网络模型:(图片来源:https://github.com/madalinabuzau/tensorflow-eager-tutorials) 保持更新,更多内容请关注 cnblogs.com ...

  8. 深度学习之TensorFlow构建神经网络层

    深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...

  9. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...

随机推荐

  1. Linux gzip命令

    语法: gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][--best/fast][文件...] 或 gzip [-acdfhlLnN ...

  2. Android:得到WebView当前页的html源码

    WebView没有提供直接的API,需要用JavaScript变通处理一下.本文试图总结一个最简单.优雅的代码. 有两步: 1.先创建一个JavaScript接口类: class MyJavaScri ...

  3. Maven打包后的文件存在中文乱码

    发现打包的js文件虽然是UTF-8格式的编码,但是有中文有乱码 可设置jvm的编码,两种方法: 在系统的环境变量中添加一个变量,名为: JAVA_TOOL_OPTIONS, 值为:-Dfile.enc ...

  4. MySql中SQL语句与其他数据库不一样的地方

    目前发现的mysql与其他数据库如SqlServer.Oracle不同的地方 mysql中的注释(--)后要多加一个空格才生效 mysql中查询条件的字符串可以是双引号 mysql中查询条件的字符串不 ...

  5. 使用kettle 的repository

    参考文献:原文:https://blog.csdn.net/m0_37979608/article/details/77096201 一.创建资源库的数据库 2.创建数据库资源库,如图 2.1.点击C ...

  6. android sdk更新后出现please update ADT to the latest version的解决方法

    参考:https://www.cnblogs.com/wicub/p/3613353.html 把 1.修改android-sdk-windows/tools/lib下的plugin.pro文件,用记 ...

  7. git 免密码push

    git版本2.14.1 windows系统 用户根目录 .gitconfig 文件添加配置 [credential] helper = store[push] default = simple 用户根 ...

  8. ROC AUC

    1.什么是性能度量? 我们都知道机器学习要建模,但是对于模型性能的好坏(即模型的泛化能力),我们并不知道是怎样的,很可能这个模型就是一个差的模型,泛化能力弱,对测试集不能很好的预测或分类.那么如何知道 ...

  9. Unity3D 物体移动方法总结

    1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...

  10. 4-20arget 属性和hover

    1.target 属性 定义和用法 target 属性规定在何处打开 action URL. 值 描述 _blank 在新窗口中打开. _self 默认.在相同的框架中打开. _parent 在父框架 ...