用Tensorflow构建一个神经网络

神经网络的搭建 模块Module 为所有神经网络提供基本类 继承nn.Module类 1.初始化函数 2.前向传播函数(x先进性一个卷积1,在进行relu激活函数非线性处理。再进行一个卷积一个非线性处理) 搭建神经网络 阅读详情
今天我们用Tensorflow构建图1所示的神经网络结构。

神经网络结构说明:

(1)输入层:300个含有一个特征的样本。

(2)隐藏层:含有一个隐藏层,隐藏层中有10个神经元节点。神经元节点的激活函数是:ReLU。

(3)输出层:一个神经元节点,没有激活函数。


图1:神经网络

实现代码如下:

#coding:utf-8
# 导入本次需要的模块
import tensorflow as tf
import numpy as np


'''
inputs:输入值
in_size:输入的大小
out_size:输出的大小
activation_function:激活函数
'''
# 构造添加一个神经层的函数
def add_layer(inputs,in_size,out_size,activation_function=None):
    # 定义weights为一个in_size行,out_size列的随机变量矩阵
    Weights = tf.Variable(tf.random_normal([in_size,out_size]))
    biases = tf.Variable(tf.zeros([1,out_size])) + 0.1
    Wx_plus_b = tf.matmul(inputs,Weights) + biases
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

#################导入数据##################################
# 构建所需要的数据。这里的x_data和y_data并不是严格的一元二次函数的关系,
# 因为我们多加了一个noise,这样看起来会更像真实情况。
x_data = np.linspace(-1,1,300)[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

# 利用占位符定义我们所需要的神经网络的输入。
# None代表无论输入有多少样本都可以。因为输入只有一个特征,所以这里是1。
xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])
#################导入数据##################################

#################搭建神经网络##################################
# 输入层只有一个属性,所以我们就只有一个输入。
# 我设置隐藏层有10个神经元
# 输出层也只有一层
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
prediction = add_layer(l1,10,1,activation_function=None)

# 定义损失函数
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
# 让神经网络通过梯度下降法来训练,这里的0.1是学习率
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

# 使用变量时,都要对变量进行初始化
init = tf.initialize_all_variables()
# 定义Session,并用Session来执行init初始化步骤
sess = tf.Session()
sess.run(init)
#################搭建神经网络##################################

#################训练网络##################################
for i in range(1000):
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    if i%50 == 0:
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
#################训练网络##################################

总共训练1000次,每隔50次打印出损失函数值。

Instructions for updating:
Use `tf.global_variables_initializer` instead.
0.073003575
0.010389006
0.00867055
0.0069280714
0.005706204
0.005057978
0.0047096335
0.0045111366
0.0043739015
0.0042599924
0.004163221
0.0040789503
0.004002313
0.0039392975
0.0038817858
0.003832464
0.0037836325
0.0037361784
0.0036902388
0.0036492061

最后,我们把梯度下降优化神经网络的过程进行可视化显示,结果如图2所示。

这里我制作了一个gif动态图片,可以直观的感受梯度下降优化神经网络过程,可是优快云博客显示不了,请前往我的知乎专栏观看图片。地址:https://zhuanlan.zhihu.com/p/36416291

图2:神经网络优化过程

从图2中我们可以清楚的看到,因为初始的参数得出的预测值和真实值相差比较大,程序初始化的参数画出的拟合线条和原始数据相差比较大,这也是为什么前几次梯度下降时,我们得到的损失函数值比较大。但是,随着梯度下降的不断优化,得到的参数越来越拟合我们的数据,真实值和预测值之间误差越来越小,得到的损失函数值也越来越小。

给出完整的代码:

#coding:utf-8
# 导入本次需要的模块
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt


'''
inputs:输入值
in_size:输入的大小
out_size:输出的大小
activation_function:激活函数
'''
# 构造添加一个神经层的函数
def add_layer(inputs,in_size,out_size,activation_function=None):
    # 定义weights为一个in_size行,out_size列的随机变量矩阵
    Weights = tf.Variable(tf.random_normal([in_size,out_size]))
    biases = tf.Variable(tf.zeros([1,out_size])) + 0.1
    Wx_plus_b = tf.matmul(inputs,Weights) + biases
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

#################导入数据##################################
# 构建所需要的数据。这里的x_data和y_data并不是严格的一元二次函数的关系,
# 因为我们多加了一个noise,这样看起来会更像真实情况。
x_data = np.linspace(-1,1,300)[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

# 利用占位符定义我们所需要的神经网络的输入。
# None代表无论输入有多少样本都可以。因为输入只有一个特征,所以这里是1。
xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])
#################导入数据##################################

#################搭建神经网络##################################
# 输入层只有一个属性,所以我们就只有一个输入。
# 我设置隐藏层有10个神经元
# 输出层也只有一层
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
prediction = add_layer(l1,10,1,activation_function=None)

# 定义损失函数
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
# 让神经网络通过梯度下降法来训练,这里的0.1是学习率
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

# 使用变量时,都要对变量进行初始化
init = tf.initialize_all_variables()
# 定义Session,并用Session来执行init初始化步骤
sess = tf.Session()
sess.run(init)
#################搭建神经网络##################################

#################训练网络##################################
# plot the real data
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data,y_data)
plt.ion()
plt.show()
for i in range(1000):
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    if i%50 == 0:
        # 每隔50次训练刷新一次图形,用红色、宽度为5的线来显示我们的预测数据和输入之间的关系,并暂停0.1s。
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
        try:
            ax.lines.remove(lines[0])
        except Exception:
            pass
        prediction_value = sess.run(prediction,feed_dict={xs:x_data})
        lines = ax.plot(x_data,prediction_value,"r-",lw=5)
        plt.pause(0.1)
#################训练网络##################################


从零到一:用TensorFlow构建你的第一个神经网络模型 本文详细介绍了如何使用TensorFlow从零开始构建第一个神经网络模型,涵盖环境配置、核心概念解析、模型构建与训练、性能评估及优化等关键步骤。通过MNIST手写数字分类实战案例,帮助初学者快速掌握深度学习基础,适合Python开发者入门TensorFlow和神经网络技术。 阅读详情

相关推荐

使用TensorFlow实现一个简单的神经网络:从构建到训练

本文详细介绍了如何使用TensorFlow构建和训练一个简单的神经网络,以解决MNIST手写数字分类问题。我们从环境准备、数据集加载、模型构建、训练过程到模型评估,逐步深入,展示了每个步骤的实现。通过这个示例,你可以了解到神经网络的基本构建和训练流程。TensorFlow提供了强大的工具和API,使得构建深度学习模型变得更加简单和高效。希望本文能为你在深度学习的学习和应用中提供一些实用的参考和启发。无论是在学术研究还是工业应用中,掌握TensorFlow将为你打开更广阔的深度学习世界。

铭渊老黄 303

Pytorch入门(二)神经网络的搭建

本文简要的介绍了如何搭建一个神经网络,以及神经网络中常用到的几种操作方式。总结了输入层、卷积层、池化层、激活层、全连接层等概念与应用。

一个非常Cool的人 3367

Android - 蓝牙开发

文章目录科普SIG类型制式编程Classic BluetoothBluetooth Low Energy蓝牙的UUID是什么?有什么用? 科普 https://zh.wikipedia.org/wiki/%E8%97%8D%E7%89%99 蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由 2.4 至 2.485 GHz 的 ISM(工业、科学、医疗)频段来进行通信。1994 年由电信商

qq_43323826的博客 1万+

搭建神经网络(六步法)

六步法教你搭建简单的神经网络,适合大概的了解。

xiaiming0的博客 6438

J-SCOPE实战:除了看波形,如何用它和JLink-RTT模式高效调试你的STM32变量?

本文详细介绍了如何利用J-SCOPE和JLink-RTT模式高效调试STM32变量,实现实时数据可视化。通过对比HSS和RTT模式的优劣,提供固件端配置、J-SCOPE设置及实战应用案例,帮助开发者快速掌握这一高效调试技术,特别适用于电机控制、传感器融合等需要实时监控的场景。

weixin_29159613的博客 445

直击痛点:VS2015离线安装报错“安装包丢失或损坏”的根源分析与精准修复

本文深入剖析了Visual Studio 2015离线安装时出现“安装包丢失或损坏”报错的根本原因,指出问题核心在于安装程序固化的临时路径查找逻辑。文章提供了一步到位的精准修复方案,通过将ISO镜像中的完整packages文件夹复制到安装程序指定的临时路径,即可无需联网、无需操作证书直接解决问题,并对比分析了其他常见方法的局限性。

weixin_27734811的博客 357

利用TensorFlow构建神经网络的一般步骤及常用方法和函数

  一、利用TensorFlow构建神经网络主要分为三个步骤:    1.使用TensorFlow定义神经网络结构及其参数和定义根据定义的神经网络结构定义前向传播输出的结果。    2.利用TensorFlow定义损失函数并选择合适的反向传播优化算法,并在其中加入可能用到的滑移平均,学习率衰减等。    3.利用前两步建立起来的图构建会话,安排batch数据送往前向传播进行计算以及反向传播过程进行...

Im_Chenxi的博客 6407

CANFD加速是什么?和CANFD有什么区别?

在使用CAN设备上位机的时候,已经选择了CANFD,但还有一个选项是“CANFD加速”,那CANFD加速和不加速有什么区别呢?刚接触CANFD小伙伴肯定一脸懵,本篇主要是给大家分享一下他们的区别,如果对你有帮助,请转发,收藏,点赞💐🎉👍😊

汽车电子软件领域知识分享 1029

如何从头开始构建神经网络?(附教程)

人工神经网络通常被称为神经网络、神经网或 NNs。这些网络受到生物神经元的启发。需要再次强调的是,实际上,生物神经元与用于构建神经网络架构的“神经元”之间几乎没有直接关联。尽管两者的基本工作方式截然不同,但它们的共同点在于,结合在一起时,这些“神经元”可以相对容易地解决复杂任务。为了理解神经网络的基本工作原理,线性方程“y = mx + c”是帮助理解神经网络的关键数学概念之一。方程中的“y = mx”部分帮助操控线条,获得所需的形状和数值。

了解关于云主机、GPU、AI、数据库托管、Kubernetes等相关技术知识,以及DigitalOcean云平台使用教程 2250

Vue3 - Element Plus 下拉选择器 el-select 覆盖修改 placeholder样式,解决覆盖不生效问题(支持修改文字颜色、文字大小、选择器边框、hover效果、宽高等任意样式

vue3,element-plus,el-select,下拉选择器,下拉选择框,Select选择器,deep覆盖无效怎么办,怎么修改placeholder文字颜色,选择器select修改边框样式,修改文字大小,elementPlus选择器如何覆盖hover效果,使用deep改不了样式,修改边框颜色,select去掉边框,vue3+elementPlus中select选择器如何修改placeholder文字样式,修改el-select样式,select选择器样式覆盖不了咋办,el-select如何覆盖原样式,

🏆 前端领域优质创作者 1万+

【YOLO部署Android安卓手机APP】YOLOv8部署到安卓实时目标检测识别——官方/自训练模型YOLOv8人脸/车辆等目标检测(可自定义更换其他目标)

本文首先讲解如何直接使用官方训练好的模型部署到手机APP进行人脸检测,然后讲解如何修改其他目标进行检测,以车辆检测为例进行讲解如何训练自己的模型部署到手机APP。本文为详细设计/配置文档,包含完整所需的环境配置搭建,项目工程配置步骤等,手把手记录使用pycharm和Android studio的工程开发过程,实现YOLO部署到安卓。实战开发,亲测无误。本项目实现了人脸检测和车辆检测,当然,以此你可以按照本项目开发步骤扩展更换为其他目标进行检测,例如更换为车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人等

嵌入式阿齐Archie 1万+

【机器学习】神经网络简介以及如何用Tensorflow构建一个简单的神经网络

神经网络是一种模拟人脑神经元连接和工作方式的计算模型,它是深度学习的基础,并在机器学习领域中扮演着重要角色神经网络是一种高效的机器学习工具,通过模拟人脑的神经网络结构和功能,实现了对复杂数据的处理和模式识别运行上述代码,你需要有TensorFlow环境由于MNIST数据集已经过时,TensorFlow可能在未来版本中将其移除,因此建议使用或其他数据集来替换已在 Tensorflow 中构建了一个小型神经网络,该网络展示了神经网络通过将决策划分到多个单元来处理复杂决策的能力。

ya的博客 1632

【BUG已解决】pip install 出现 error: Microsoft Visual C++ 14.0 or greater is required 解决方案

方案磁盘占用适用场景推荐指数安装Build Tools3-6GB长期Windows Python开发⭐⭐⭐⭐⭐寻找预编译wheel无额外占用只是想快速装上某个包⭐⭐⭐⭐⭐用conda安装视包而定已经在用conda环境⭐⭐⭐⭐⭐升级到新版本无额外占用库本身有更新的预编译版本⭐⭐⭐⭐使用WSL2需要额外配置Linux子系统频繁遇到Windows编译问题⭐⭐⭐⭐的核心是Windows 缺少本地 C/C++ 编译器,而目标包需要在本机编译。先看是否有捷径。

博客 1万+

用 Tensorflow 构建一个神经网络

本次构建的神经网络: 神经网络结构说明: (1)输入层:300个含有一个特征的样本。 (2)隐藏层:含有一个隐藏层,隐藏层中有10个神经元节点。神经元节点的激活函数是:ReLU。 (3)输出层:一个神经元节点,没有激活函数 实现代码: import tensorflow as tf import numpy as np """ inputs:输入值 in_size:输入的大小 out_size...

南淮北安的博客 674

Flatten 层的深度理解与运用

Flatten 层的深度理解与运用

你要拥有一个你喜欢并且热爱的人生 7030

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

tensorflow手动构建一个神经网络步骤

添加神经网络层 构建一个神经网络 from __future__ import print_function import tensorflow as tf import numpy as np import matplotlib.pyplot as plt def add_layer(inputs, in_size, out_size, activation_function=None): Weights = tf.Variable(tf.random_normal([in_size, out

Lomo的博客 289

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Tensorflow构建一个简单的神经网络

假设输入层一个,隐藏层10个,输出层一个神经元import tensorflow as tfimport numpy as np #define add a neural layer def add_layer(inputs, in_size, out_size, activition_function=None): # add one more layer and return the o

u013275928的专栏 578

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

tensorflow构建一个简单神经网络

使用Tensorflow实现一个简单的神经网络 输入数据: 输入数据的形状是[300, 1], 也就是每个元素有一个特征,所以输入神经元是一个。 隐藏层: 输出神经元10个。输出数据会成为[300, 10]的形状。也就是300个元素,每个元素的特征变成了10个。 激活函数使用Relu 输出层: 输出数据是[300, 1] 不使用激活函数 impo...

weixin_34044273的博客 78

构建第一个tensorflow神经网络

兄弟姐妹们,如需转载请标明出处:http://blog.youkuaiyun.com/jiangjunshow 总目录 大家已经学过如何将待预测数据输入到神经网络中,也明白了神经网络是如何对这些数据进行预测的,还知道了神经网络是如何判断自己预测得是否准确的。那么如果结果预测得不准确,是不是要想办法让预测变得准确呢?这个努力让自己预测得更准确的过程就是学习。 在前面的文章中,我们已经知道,预测得是否准确是

人工智能AI技术 1万+

使用tensorflow构建一个卷积神经网络

欢迎关注”生信修炼手册”!本文是对tensforflow官方入门教程的学习和翻译,展示了创建一个基础的卷积神经网络模型来解决图像分类问题的过程。具体步骤如下1. 加载数据集tensorfl...

庐州月光的博客 913

TensorFlow实战构建第一个神经网络模型的完整指南

恭喜!您已经成功使用TensorFlow构建并训练了第一个神经网络模型。这个简单的全连接网络是深度学习的入门基石。接下来,您可以探索更复杂的模型结构,如卷积神经网络(CNN)用于图像识别、循环神经网络(RNN)用于序列数据处理,并在更复杂的数据集上进行实践,不断深化对TensorFlow和深度学习的理解。

allrightxiong的博客 817

TensorFlow入门教程从零开始构建你的第一个神经网络模型

使用tf.keras.Sequential()来创建模型。首先添加一个Flatten层,输入形状为(28, 28)。然后,可以添加一个或多个Dense层作为隐藏层,通常使用ReLU等激活函数引入非线性。最后,添加一个Dense输出层,由于我们有10个类别(数字0-9),所以该层有10个神经元,并使用softmax激活函数来输出每个类别的概率。

u010682093的博客 961

TensorFlow从入门到精通构建第一个神经网络模型的实践指南

模型结构定义完成后,需要对其进行编译。在编译阶段,我们需要指定三个关键要素:优化器、损失函数和评估指标。对于多分类问题,损失函数通常选择交叉熵损失。优化器负责根据损失值更新网络的权重,Adam优化器因其自适应学习率的特性而成为常用的选择。评估指标则用于在训练和测试过程中衡量模型性能,准确率是最直观的指标之一。编译过程将配置模型的学习过程,为接下来的训练做好准备。成功构建并运行第一个神经网络模型是一个重要的里程碑。

yaoeye的博客 382

TensorFlow和Keras简介:使用TensorFlow构建您的第一个神经网络

神经网络 (NN) 是一类受人脑结构和功能启发的机器学习模型。它们由相互连接的节点(称为神经元)组成,按层组织。每个神经元接受输入,应用数学运算,并产生传递到下一层的输出。神经网络能够根据输入数据中的模式和关系进行学习和预测。

新华编程特战队 1909
上一篇: L0范数、L1范数和L2范数的区别
下一篇: Tensorflow中可视化好助手Tensorboard(一)
Microstrong0305
Microstrong0305 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄12年 6405粉丝 312原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值