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 ...
随机推荐
- [转][C#]加密解密类
{ public static class Crypter { private static string FDefaultPassword = typeof(Crypter).FullName; p ...
- Zookeeper集群节点数量为什么要是奇数个?
无论是公司的生产环境,还是自己搭建的测试环境,Zookeeper集群的节点个数都是奇数个.至于为什么要是奇数个,以前只是模糊的知道是为了满足选举需要,并不知道详细的原因.最近重点学习zookeeper ...
- Activiti的25张表
Activiti流程引擎的运行,背后需要数据库的25张表支持,这25张表, 主要是在流程运行过程中,记录存储一些参与流程的用户主体,以及流程定义的存储,流程执行时候的一些信息,以及流程的历史信息等. ...
- shareSdk分享图片
/** * 只分享图片 * * @param bitmap bitmap */ private void sharedImage(Bitmap bitmap) { RxPermissions rxPe ...
- python至winreg模块
_winreg模块在python3中已经改名了 https://blog.csdn.net/zhangxiaoyang0/article/details/72236305?fps=1&loca ...
- Java&Android TimeUtil ~ A Good Util!
时间工具类 import android.text.TextUtils; import android.util.Log; import java.security.MessageDigest; im ...
- unity编程心得
1. 不要通过public变量 从工程面板 直接 拖 GameObjct 的引用, 当这样的public变量很多 ,子物体很多,又没有做成预制体,,别人重新移植这段功能会很麻烦,,应该用GameOb ...
- aio,nio ,io 心得
1.nio 流的过程有几个,连接,可读,读 ,返回 :连接了不一定可读,等待浪费时间,这些时间可以去读其他的连接,selector是管理,管理全部测一下可不可读,只对可读的连接进行读取.同时,nio有 ...
- sessionStorage实现note的功能
功能图如图所示: 文本域中输入点击保存后的结果如图所示: 点击读取后的结果图: 选择山羊对应的按钮进行修改并点击保存后的结果: 选择山羊养对应的单选按钮进行删除操作后的结果图: 点击清空后的结果: 源 ...
- OpenStack 安装:nova服务
上一篇介绍了glance,并且成功创建了一个镜像,这一篇介绍Nova. 首先创建Nova用户,需要记得先source环境变量,然后创建Nova用户,并设置密码为nova [root@linux-nod ...