tensorflow学习之(五)构造简单神经网络 并展示拟合过程
# def 添加层 如何构造神经网络 并展示拟合过程
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt # 若没有 pip install matplotlib # 定义一个神经层
def add_layer(inputs, in_size, out_size, activation_function=None):
#add one more layer and return the output of the layer
Weights = tf.Variable(tf.random_normal([in_size, out_size])) #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值为-1到1之间,有300个单位(例子),即为1*300的行向量,
# 通过[:, np.newaxis],再加一个维度newaxis,即300*1的列向量
x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape) # 均值为0.方差为0.05,格式和x_data一样
y_data = np.square(x_data) - 0.5 + noise #1是指的数据的尺寸,None指的batch size的大小,所以可以是任何数,无论给多少个例子都行
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1]) # 设置输入层,隐藏层,输出层
# 输入层
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# 输出层
prediction = add_layer(l1, 10, 1, activation_function=None) loss = tf.reduce_mean(
# 对每个例子进行求和并取平均值
# reduction_indices参数,表示函数的处理维度,
# reduction_indices=[1]指按行求和reduction_indices=[0]指按列求和
# 如果代码中并没有reduction_indices这个参数,该参数取默认值None,将把input_tensor降到0维,也就是一个数,即对所有数求和
tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 以0.1的学习效率对误差进行更正和提升 #两种初始化的方式
#init = tf.initialize_all_variables()
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) fig = plt.figure()
# 将figure设置的画布大小分成几个部分,
# plt.subplot(2,2,1)参数‘221’表示2(row)x2(colu),即将画布分成2x2,两行两列的4块区域,1表示选择图形输出的区域在第一块,
# 图形输出区域参数必须在“行x列”范围内,
# 此处必须在1和2之间选择——如果参数设置为subplot(1,1,1),则表示画布整个输出,不分割成小块区域,图形直接输出在整块画布上
ax = fig.add_subplot(1, 1, 1)
#设置画布的输入的数据为x_data y_data
ax.scatter(x_data, y_data)
#在使用matplotlib的过程中,常常会需要画很多图,但是好像并不能同时展示许多图。 这是因为python可视化库matplotlib的显示模式默认为阻塞(block)模式。
# 什么是阻塞模式那?我的理解就是在plt.show()之后,程序会暂停到那儿,并不会继续执行下去。如果需要继续执行程序,就要关闭图片。
# 那如何展示动态图或多个窗口呢?这就要使用plt.ion()这个函数,使matplotlib的显示模式转换为交互(interactive)模式。即使在脚本中遇到plt.show(),代码还是会继续执行。
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:
# to see the step improment 显示实际点的数据
print(sess.run(loss,feed_dict = {xs:x_data,ys:y_data}))
try:
# 每次划线前抹除上一条线,抹除lines的第一条线,由于lines只有一条线,则为lines[0],第一次没有线
ax.lines.remove(lines[0])
except Exception:
pass
# 显示预测数据
prediction_value = sess.run(prediction, feed_dict={xs: x_data}) # 存储 prediction_value 的值
lines = ax.plot(x_data, prediction_value, 'r-', lw=5) # 用红色的线画,且宽度为5 # 停止0.1秒后再画下一条线
plt.pause(0.1)
实验结果图展示:

附:参考https://www.cnblogs.com/likethanlove/p/6547405.html 通过图可以加深对tensorflow reduction_indices的理解:

tensorflow学习之(五)构造简单神经网络 并展示拟合过程的更多相关文章
- tensorflow学习笔记五:mnist实例--卷积神经网络(CNN)
mnist的卷积神经网络例子和上一篇博文中的神经网络例子大部分是相同的.但是CNN层数要多一些,网络模型需要自己来构建. 程序比较复杂,我就分成几个部分来叙述. 首先,下载并加载数据: import ...
- tensorflow学习之搭建最简单的神经网络
这几天在B站看莫烦的视频,学习一波,给出视频地址:https://www.bilibili.com/video/av16001891/?p=22 先放出代码 #####搭建神经网络测试 def add ...
- tensorflow学习笔记——图像识别与卷积神经网络
无论是之前学习的MNIST数据集还是Cifar数据集,相比真实环境下的图像识别问题,有两个最大的问题,一是现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的.二是现实生活中的物体 ...
- tensorflow学习笔记五----------逻辑回归
在逻辑回归中使用mnist数据集.导入相应的包以及数据集. import numpy as np import tensorflow as tf import matplotlib.pyplot as ...
- tensorflow学习之(七)使用tensorboard 展示神经网络的graph/histogram/scalar
# 创建神经网络, 使用tensorboard 展示graph/histogram/scalar import tensorflow as tf import numpy as np import m ...
- tensorflow学习之(六)使用tensorboard展示神经网络的graph
# 创建神经网络, 使用tensorboard 展示graph import tensorflow as tf import numpy as np import matplotlib.pyplot ...
- tensorflow学习笔记四----------构造线性回归模型
首先通过构造随机数,模拟数据. import numpy as np import tensorflow as tf import matplotlib.pyplot as plt # 随机生成100 ...
- swift学习笔记(五)构造过程
构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.在构造过程中,对每一个属性进行了初始值预设和其它必要的准备和初始化工作. 与OC相比,swift的构造函数.不须要返回值.同一时候,在 ...
- Tensorflow学习笔记3:卷积神经网络实现手写字符识别
# -*- coding:utf-8 -*- import tensorflow as tf from tensorflow.examples.tutorials.mnist import input ...
随机推荐
- Spring系列博客汇总
https://www.cnblogs.com/leeSmall/category/1093236.html springmvc https://www.cnblogs.com/leeSmall/ ...
- 杂谈c.cpp
Endl确保程序运行前刷新输出(将其立即显示在屏幕上),而’\n’却不能保证 在c++中,是以分号分割的,所以可以把几条代码放在一行,也可以把一条代码放在几行 编译器负责分配和标记内存的细节 C++可 ...
- Vue+webpack项目配置便于维护的目录结构
新建项目的时候创建合理的目录结构便于后期的维护是很重要 环境:vue.webpack 目录结构: 项目子目录结构 子目录结构都差不多,主要目录是在src下面操作 src目录结构 src/common ...
- 系统变量之System.getenv()和System.getProperty()
Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多与ja ...
- Servlet的几个关键知识点
1.ServletConfig ServletConfig是Servlet的配置文件.对应于web.xml中的<servlet></servlet>标签.ServletConf ...
- C语言的基础输入输出
首先来整理一下各个数据类型的输入输出格式: 1.char %c 2.int/short int %d 3.long int %ld 4.long long int %lld 5.float %f 6. ...
- 01 Python初识
基础: 1.后缀名是py ATT: 单个文件执行,后缀无所谓 2.两种执行方式 终端 python+文件路径 解释器内部: 直接执行 3.解释器路径: #/usr/bin/env pyth ...
- laravel不能读取session
Laravel用redis存储session,论坛有讨论说关于session无法保存的问题:https://laravel-china.org/topics/13510/points-to-be-pa ...
- JUC详解
一.Java多线程 -- JUC包源码分析1 -- CAS/乐观锁 乐观锁其实就是不加锁,用CAS + 循环重试,实现多个线程/多个客户端,并发修改数据的问题 使用AtomicStampedRefer ...
- 为什么要使用mybaits
通常在项目开发过程中,有很多代码是重复的,固定不变的.为了提升开发效率,可将这些 固定不变的代码提取出来,生成class文件,将class文件打jar包,基于框架开发. mybaits是一个ORM框架 ...