TensorFlow实战——入门与实现前馈神经网络

入门

我们先来理解一下TensorFlow字面上的意思:

  • Tensor,张量,其实我们可以简单的理解为是多维数组,这也是TensorFlow中的基本数据结构。
  • Flow,流,很直观的表达了,Tensor之间的转化是一种类似于流的方式。

ex.

import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")
result = a+b
sess = tf.Session()
sess.run(result)

解析

tf.constant是用来创建常量Tensor的。在运行到result = a+b时,TensorFlow并没有真的把两个Tensor相加。tf.Session()返回的是和TensorFlow的会话,该会话我们可以调用其的run方法。如sess.run(result),这时TensorFlow才会去回溯帮我们,类似于流水一样,从上面流下来,真正的帮计算出result。结果:

array([ 3.,  5.], dtype=float32)

实现前馈神经网络

import tensorflow as tf
from numpy.random import RandomState

# 每次我们训练的时候 只喂8条数据进去
batch_size = 8

"""
random_normal 生成随机多维数组
def random_normal(shape,
                  mean=0.0,
                  stddev=1.0,
                  dtype=dtypes.float32,
                  seed=None,
                  name=None):
如 w1 就生成了 2×3 的随机数组,数值发布为平均数为0,标准差为1

这里,我们准备构建的神经网络为:
输入层为 2个节点
隐藏层(只有一层)为 3个节点

w1 和 w2
"""
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 可以看成一个入口,
我们不希望把如此巨大的数据量全都一下子装进TensorFlow里,这极大的增加了开销。
我们更希望是,每次喂一部分的数据,然后每次更新优化优化权值。
x 是特征数据的入口,就2维
y_ 是label数据的入口
None 代表行数任意
"""
x = tf.placeholder(tf.float32, shape=(None, 2), name=‘x-input‘)
y_ = tf.placeholder(tf.float32, shape=(None, 1), name=‘y-input‘)

# 矩阵相乘,得到预测结果 y
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

# 损失函数,后面会讲
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))

"""
 创建优化器,
 0.001 是学习率
 优化目标三 最小化 cross_entropy
"""
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

# 随机生成数据
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size, 2)
Y = [[int(x1 + x2 < 1)] for (x1, x2) in X]

"""
TF的会话需要关闭,
但若我们使用

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

的编码写法,就不用担心忘记关闭会话了。
"""
with tf.Session() as sess:
    #  创建变量初始化的操作,并run它
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    """
    于是便执行了 tf.Variable ,w1 w2 被初始化了。我们来看下打印结果:
    [[-0.81131822  1.48459876  0.06532937]
     [-2.44270396  0.0992484   0.59122431]]
 [[-0.81131822]
 [ 1.48459876]
 [ 0.06532937]]
    """
    print sess.run(w1)
    print sess.run(w2)

    # 迭代次数
    STEPS = 5000

    for i in range(STEPS):
        # 截取数据
        start = (i * batch_size) % dataset_size
        end = min(start + batch_size, dataset_size)

       # 喂数据给 x 和 y_,并 run 训练
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})

      """
      每训练 1000 次
      我们打印出整个数据集的 cross_entropy

     Atter 0 training step(s),cross entropy on all data is 0.0674925
Atter 1000 training step(s),cross entropy on all data is 0.0163385
Atter 2000 training step(s),cross entropy on all data is 0.00907547
Atter 3000 training step(s),cross entropy on all data is 0.00714436
Atter 4000 training step(s),cross entropy on all data is 0.00578471 

    我们可以看到随着优化,cross entropy越来越低

      """
        if i % 1000 == 0:
            total_cross_entropy = sess.run(cross_entropy,feed_dict={x: X, y_: Y})
            print("Atter %d training step(s),cross entropy on all data ""is %g " % (i, total_cross_entropy))

    """
    最后 看一下 w1 w2 优化调整后的结果:

    [[-1.9618274   2.58235407  1.68203783]
     [-3.4681716   1.06982327  2.11788988]]
[[-1.8247149 ]
 [ 2.68546653]
 [ 1.41819501]]

    """
    print sess.run(w1)
    print sess.run(w2)

损失函数

接下来我们看看上述代码中的损失函数:

cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))

cross_entropy,交叉熵,用于计算两个概率分布之间的距离:

H(p,q)=?∑xp(x)logq(x)

这里我们之所以可以使用它作为损失函数,是因为我们这里把二分类label简单的看作值是1的概率。

这里的p(x)就是y_,label数据。这里的 logq(x)就是tf.log(tf.clip_by_value(y, 1e-10, 1.0)),预测的结果。tf.clip_by_value(y, 1e-10, 1.0)是为了将y中的取值限制在[1e-10, 1.0]。最后我们再使用tf.reduce_mean对其求一个平均值,并取负数,便得到了损失函数。

时间: 2024-10-05 05:32:28

TensorFlow实战——入门与实现前馈神经网络的相关文章

TensorFlow实战之实现AlexNet经典卷积神经网络

本文已同步本人另外一个博客(http://blog.csdn.net/qq_37608890/article/details/79371347) 本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.AlexNet模型及其基本原理阐述 1.关于AlexNet 2012年,AlexKrizhevsky提出了深度卷积神经网络模型AlexNet,可以看作LeNet的一种更深更宽的版本.该模型包含了6亿3000万个连

前馈神经网络练习:使用tensorflow进行葡萄酒种类识别

数据处理 样本数据描述 样本数据集是double类型的178 * 14矩阵,第一列表示酒所属类别,后面13列分别表示当前样本的13个属性: 1) Alcohol 2) Malic acid 3) Ash 4) Alcalinity of ash 5) Magnesium 6) Total phenols 7) Flavanoids 8) Nonflavanoid phenols 9) Proanthocyanins 10) Color intensity 11) Hue 12) OD280/OD

分享《深度学习之TensorFlow:入门、原理与进阶实战》PDF+源代码

下载:https://pan.baidu.com/s/1zI-pblJ5dEwjGVe-QQP9hQ 更多资料:http://blog.51cto.com/3215120 <深度学习之TensorFlow:入门.原理与进阶实战>,李金洪 著.中文PDF,939页,带书签目录,文字可以复制粘贴.配套源代码. 如图: 原文地址:http://blog.51cto.com/14050756/2315854

深度学习之TensorFlow:入门原理与进阶实战

深度学习之TensorFlow:入门原理与进阶实战 链接:https://pan.baidu.com/s/1wUos19e7qhm_fA52FV8gQg 提取码:nz8i 目录 · · · · · · 配套学习资源 前言 第1篇 深度学习与TensorFlow基础 第1章 快速了解人工智能与TensorFlow 2 1.1 什么是深度学习 2 1.2 TensorFlow是做什么的 3 1.3 TensorFlow的特点 4 1.4 其他深度学习框架特点及介绍 5 1.5 如何通过本书学好深度学

TensorFlow快速入门与实战

课程目录:01.课程内容综述02.第一章内容概述03.TensorFlow产生的历史必然性04.TensorFlow与JeffDean的那些事05.TensorFlow的应用场景06.TensorFlow的落地应用07.TensorFlow的发展现状08.第二章内容概述09.搭建你的TensorFlow开发环境10.HelloTensorFlow11.在交互环境中使用TensorFlow12.在容器中使用TensorFlow13.第三章内容概述14.TensorFlow模块与架构介绍15.Ten

机器学习、深度学习的理论与实战入门建议整理

引言 拿到这份文档时想必你的脑海中一直萦绕着这么一个问题,"机器学习/深度学习要怎么学呢?(怎么入门,又怎么进一步掌握?)".关于这个问题其实并没有一个标准答案,有的人可能适合自底向上的学,也就是先从理论和数学开始,然后是算法实现,最后再通过一些项目去解决生活中的实际问题:有的人则可能适合自顶向下的学,也就是在弄清楚什么是机器学习及为什么学机器学习后,先确定一个系统性的用机器学习来解决实际问题的程序,然后找到一个合适的工具,接着再在各种数据集上做练习以不断加强自己的实践能力与巩固对算法

《Tensorflow实战Google深度学习框架》PDF一套四本+源代码_高清_完整

TensorFlow实战 热门Tensorflow实战书籍PDF高清版一套共四本+源代码,包含<Tensorflow实战>.<Tensorflow:实战Google深度学习框架(完整版)>.<TensorFlow:实战Google深度学习框架(第2版)>与<TensorFlow技术解析与实战>,不能错过的学习Tensorflow书籍. TensorFlow是谷歌2015年开源的主流深度学习框架,目前已在谷歌.优步(Uber).京东.小米等科技公司广泛应用.&

TensorFlow框架(4)之CNN卷积神经网络详解

1. 卷积神经网络 1.1 多层前馈神经网络 多层前馈神经网络是指在多层的神经网络中,每层神经元与下一层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接的情况,如图 11所示. 图 11 对于上图中隐藏层的第j个神经元的输出可以表示为: 其中,f是激活函数,bj为每个神经元的偏置. 1.2 卷积神经网络 1.2.1 网络结构 卷积神经网络与多层前馈神经网络的结构不一样,其每层神经元与下一层神经元不是全互连,而是部分连接,即每层神经层中只有部分的神经元与下一层神经元有连接,但是神经元之间

TensorFlow实战之CNN实现对鸡蛋的分类

本文标签: TensorFlow TensorFlow实战之CNN 3.1问题分析 为了评估N个鸡蛋中是否有圈养鸡蛋,我们利用卷积神经网络(CNN)让计算机学习圈养鸡蛋和土鸡蛋图片的特征,然后根据鸡蛋的图片将其分类.通过对图片的预处理,将其转化为32*32相同大小的图片.在神经网络加载数据之后,会将其转化为32*32*3的数组.然后通过卷积和池化等一系列操作提取出图片的特征.以达到对鸡蛋进行分类的目的.我们主要用Python语言在TensorFlow中构建卷积神经网络(CNN),让CNN学习圈养