0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用tensorflow构建一个简单神经网络

电子设计 2018-10-16 08:41 次阅读

给大家分享一个案例,如何使用tensorflow 构建一个简单神经网络。首先我们需要创建我们的样本,由于是监督学习,所以还是需要label的。为了简单起见,我们只创建一个样本进行训练, 可以当做是在模拟随机梯度下降的过程

。 代码如下:

x = tf.constant([[0.7,0.9]])

y_ = tf.constant([[1.0]])

我们使用tf中的常量来创建样本和label。 这是一个有两个特征的样本。

然后定义每一层的权重和偏差变量

w1 = tf.Variable(tf.random_normal([2,3], stddev=1, seed=1))

w2 = tf.Variable(tf.random_normal([3,1], stddev=1, seed=1))

b1 = tf.Variable(tf.zeros([3]))

b2 = tf.Variable(tf.zeros([1]))

根据上一节讲的内容,我们使用tf的变量来生成权重和偏差。

神经网络模型

我们的神经网络模型大概如下图:

上面我们尝试创建一个只有两个特征的输入层, 只有一层,3个神经元的隐藏层,以及最后的输出层。 由于我们要做的是二分类,所以输出层只有一个神经元。

前向传播算法

好了现在我们可以来看看前向传播了,如果对前向传播还不太了解的话,请复习一下深度学习的基础概念~ 这里只做简单的介绍。 首先在输入层我们有两个特征输入就是x1和x2,他们都会传递给隐藏层的3个神经元中进行训练。

每一个神经元都是输入层取值的加权和,就像图出计算的一样,分别计算出a11,a12和a13. 同样的输出层的计算是上一层的每一个神经元的取值的加权和,也正如上图计算的一样。这就是整个的前向传播算法,上一层的计算结果是下一层的输入,以此类推。对数学比较熟悉的同学一定猜到了,权重(w)的计算过程就是一个矩阵乘法。 首先是由x1和x2组成1*2的矩阵, 以及隐藏层的每一个神经元上对应的权重(w) 组合的2*3的矩阵(2个输入特征的w,3个神经元),他们两个做矩阵乘法就是这一层的前向传播算法,结果是一个1*3的矩阵。再接着跟输出层的3*1的矩阵(3个输入特征的w和1个神经元)继续做矩阵乘法。就是最后的结果。 很幸运的是tf为我们实现了做矩阵乘法的函数就是matmul。 那么上面这个前向传播的过程就是如下的代码:

a = tf.nn.relu(tf.matmul(x,w1) + b1)

y = tf.matmul(a, w2) + b2

我们在早期的帖子中说过神经网络的每一层都有一个激活函数,我们分类问题的时候都会加入激活函数来增加非线性效果。那么上面可以看到我们使用tf.nn.relu这个tf为我们实现好的激活函数来给我们的隐藏层前向传播算法增加非线性。 输出层y没有用到激活函数,我们之后会说明。

损失函数

我们需要一个损失函数来计算我们预测的结果与真实值的差距。 tf为我们实现了众多的损失函数。由于这我们要做二分类问题,那么我们就需要sigmoid作为激活函数,所以我们也要使用tf为sigmoid实现的损失函数。

cost = tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=y_, name=None)

sigmoid_cross_entropy_with_logits的第一个参数是我们的预测值,第二个参数是真实的值,也就是我们的labels。 刚才我们计算前向传播的时候再输出层并没有使用任何激活函数,是因为我们tf的损失函数中会给输出层加入相应的激活函数。 也就是sigmoid_cross_entropy_with_logits已经给输出层加入了sigmoid激活函数了。

反向传播与梯度下降

为了实现梯度下降算法,我们需要进行反向传播计算来求得每一个参数对应损失函数的导数。所幸的是tf同样为我们提供了各种优化的反向传播算法。 这里我们使用专门的梯度下降。如下:

train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

GradientDescentOptimizer是梯度下降的优化算法,参数是学习率,这里我们设置为0.01。 同时优化目标是最小化损失函数。 所以是minimize函数,并且把损失函数作为参数传递过去。

开始训练

with tf.Session() as sess:

init = tf.initialize_all_variables()

sess.run(init)

for i in range(100):

sess.run(train_op)

print(sess.run(w1))

print(sess.run(w2))

之前的帖子说过tf是图计算。 我们之前做的所有的操作都不会产生实际的计算效果。而是在tf中维护一个默认的图, 当我们显示的使用tf的session.run的时候才会去计算整个图中的每一个几点。 上面我们声明一个Session,并在一开始初始化所有的变量, 循环100次代表训练100轮迭代。 最后输出训练处的所有的w。

完整的代码

import tensorflow as tf

import numpy as np

x = np.arange(4, dtype=np.float32).reshape(2,2) # 使用np来创造两个样本

y_ = np.array([0,1], dtype=np.float32).reshape(2,1) # 使用np来创造两个label

w1 = tf.Variable(tf.random_normal([2,3], stddev=1, seed=1))

w2 = tf.Variable(tf.random_normal([3,1], stddev=1, seed=1))

b1 = tf.Variable(tf.zeros([3]))

b2 = tf.Variable(tf.zeros([1]))

a = tf.nn.relu(tf.matmul(x,w1) + b1)

y = tf.matmul(a, w2) + b2

cost = tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=y_, name=None)

train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

with tf.Session() as sess:

init = tf.initialize_all_variables()

sess.run(init)

for i in range(100):

sess.run(train_op)

print(sess.run(w1))

print(sess.run(w2))

以上就是使用tensorflow 构建一个简单神经网络的方法.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4733

    浏览量

    100410
  • tensorflow
    +关注

    关注

    13

    文章

    328

    浏览量

    60463
收藏 人收藏

    评论

    相关推荐

    TF之CNN:Tensorflow构建卷积神经网络CNN的嘻嘻哈哈事之详细攻略

    TF之CNN:Tensorflow构建卷积神经网络CNN的嘻嘻哈哈事之详细攻略
    发表于 12-19 17:03

    【案例分享】ART神经网络与SOM神经网络

    元,它决定了该输入向量在地位空间中的位置。SOM神经网络训练的目的就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。SOM的训练过程其实很简单,就是接收到
    发表于 07-21 04:30

    简单神经网络的实现

    简单神经网络
    发表于 09-11 11:57

    高阶API构建模型和数据集使用

    、前言前面结合神经网络简要介绍TensorFlow相关概念,并给出了MNIST手写数字识别的简单示例,可以得出结论是,构建
    发表于 11-04 07:49

    【AI学习】第3篇--人工神经网络

    `本篇主要介绍:人工神经网络的起源、简单神经网络模型、更多神经网络模型、机器学习的步骤:训练与预测、训练的两阶段:正向推演与反向传播、以Tensor
    发表于 11-05 17:48

    如何移植CNN神经网络到FPGA中?

    二次开发。移植神经网络到Lattice FPGA上可以分为三步:第步:使用Tensorflow, Caffe, Keras训练自己的
    发表于 11-26 07:46

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输
    发表于 07-12 08:02

    如何使用TensorFlow神经网络模型部署到移动或嵌入式设备上

    有很多方法可以将经过训练的神经网络模型部署到移动或嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    发表于 08-02 06:43

    步学用Tensorflow构建卷积神经网络

    本文主要和大家分享如何使用Tensorflow从头开始构建和训练卷积神经网络。这样就可以将这个知识作为
    发表于 11-16 01:32 3478次阅读
    <b class='flag-5'>一</b>步<b class='flag-5'>一</b>步学用<b class='flag-5'>Tensorflow</b><b class='flag-5'>构建</b>卷积<b class='flag-5'>神经网络</b>

    TensorFlow写个简单神经网络

    这次就用TensorFlow写个神经网络,这个神经网络写的很简单,就三种层,输入层--隐藏层----输出层;
    的头像 发表于 03-23 15:37 5137次阅读
    用<b class='flag-5'>TensorFlow</b>写个<b class='flag-5'>简单</b>的<b class='flag-5'>神经网络</b>

    谷歌正式发布TensorFlow神经网络

    日前,我们很高兴发布了 TensorFlow神经网络 (Graph Neural Networks, GNNs),此库可以帮助开发者利用 TensorFlow 轻松处理图结构化数据。
    的头像 发表于 01-05 13:44 1456次阅读

    如何构建神经网络

    神经网络是模拟人体生物神经元原理构建的,比较基础的有M-P模型,它按照生物 神经元的结构和工作原理构造出来的
    的头像 发表于 02-24 16:06 1751次阅读
    如何<b class='flag-5'>构建</b><b class='flag-5'>神经网络</b>

    PyTorch神经网络模型构建过程

    PyTorch,作为广泛使用的开源深度学习库,提供了丰富的工具和模块,帮助开发者构建、训练和部署神经网络模型。在神经网络模型中,输出层是
    的头像 发表于 07-10 14:57 414次阅读

    使用TensorFlow进行神经网络模型更新

    使用TensorFlow进行神经网络模型的更新是涉及多个步骤的过程,包括模型定义、训练、评估以及根据新数据或需求进行模型微调(Fine-tuning)或重新训练。下面我将详细阐述这
    的头像 发表于 07-12 11:51 303次阅读

    如何构建多层神经网络

    构建多层神经网络(MLP, Multi-Layer Perceptron)模型是在机器学习和深度学习领域广泛使用的技术,尤其在处理分类和回归问题时。在本文中,我们将深入探讨如何从头
    的头像 发表于 07-19 17:19 640次阅读