tensorflow例子-【老鱼学tensorflow】
本节主要用一个例子来讲述一下基本的tensorflow用法。
在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律。
伪造数据
import numpy as np
# 创建100个随机数
x_data = np.random.rand(100).astype(np.float32)
# 创建最终要模拟的线性公式
y_data = x_data * 0.1 + 0.3
创建模型
在伪造数据之后,我们当作不知道这些数据中蕴含的规律,我们只看到有一堆(x, y)的数据,但其中是什么规律我们不知道,但想通过神经网络的方式来揭示其中的规律。
我们觉得这个规律是线性规律,因此需要有权重值和偏置值,并且先随便设置一下其初始值:
import tensorflow as tf
# tensorflow中的变量系数,1维的初始化为从-1到1之间的一个随机数
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
# 偏置,其实就是线性方程中的截距值,1维数据,初始化为0
biases = tf.Variable(tf.zeros([1]))
# 在tensorflow中就是根据看到的数值,通过逼近的方式来寻找出数值的规律,最终会把这里的Weights值和biases值设置成接近原始数据中的参数值。
y = Weights * x_data + biases
# 计算损失值为预测值和实际值之差平方和的平均值,损失值越小就表示越接近实际值
loss = tf.reduce_mean(tf.square(y - y_data))
# 神经网络要做的就是通过不停地迭代使这个损失值越来越小,而计算越来越小的方法是通过梯度下降算法来实现的
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
上面创建了基本的模型,然后需要开始要启动这个模型了,在启动之前,由于我们创建了几个变量,但只是通知TensorFlow说我们拥有这些变量值,但还未进行实际的赋值,要进行实际的赋值,需要通过:
# 初始化所有变量
init = tf.global_variables_initializer()
sess = tf.Session()
# 激活初始化值
sess.run(init)
不停拟合数据
我们可以通过不停给模型数据,让这个模型逐步降低损失值来达到最能拟合输入值的系数:
for step in range(200):
sess.run(train)
# 每隔20步打印一下模拟出来的权重值和偏置值
if (step % 20 == 0):
print(step, sess.run(Weights), sess.run(biases))
输出为:
0 [ 0.3676317] [ 0.21848023]
20 [ 0.16707394] [ 0.26867095]
40 [ 0.11792699] [ 0.29162663]
60 [ 0.10479139] [ 0.29776204]
80 [ 0.1012806] [ 0.29940188]
100 [ 0.10034226] [ 0.29984015]
120 [ 0.10009148] [ 0.29995728]
140 [ 0.10002445] [ 0.2999886]
160 [ 0.10000654] [ 0.29999697]
180 [ 0.10000175] [ 0.29999918]
从输出结果上来看权重值比较接近于我们原先进行伪造的系数值0.1,而偏置值也比较接近我们伪造的截距值0.3,看来神经网络很好地从一堆数据中揭示了我们预先设置好的规律值。
完整的代码为:
import tensorflow as tf
import numpy as np
# 创建100个随机数
x_data = np.random.rand(100).astype(np.float32)
# 创建最终要模拟的线性公式
y_data = x_data * 0.1 + 0.3
# tensorflow中的变量系数,1维的初始化为从-1到1之间的一个随机数
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
# 偏置,其实就是线性方程中的截距值,1维数据,初始化为0
biases = tf.Variable(tf.zeros([1]))
# 在tensorflow中就是根据看到的数值,通过逼近的方式来寻找出数值的规律,最终会把这里的Weights值和biases值设置成接近原始数据中的参数值。
y = Weights * x_data + biases
# 计算损失值为预测值和实际值之差平方和的平均值,损失值越小就表示越接近实际值
loss = tf.reduce_mean(tf.square(y - y_data))
# 神经网络要做的就是通过不停地迭代使这个损失值越来越小,而计算越来越小的方法是通过梯度下降算法来实现的
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# 初始化所有变量
init = tf.global_variables_initializer()
sess = tf.Session()
# 激活初始化值
sess.run(init)
for step in range(200):
sess.run(train)
# 每隔20步打印一下模拟出来的权重值和偏置值
if (step % 20 == 0):
print(step, sess.run(Weights), sess.run(biases))
tensorflow例子-【老鱼学tensorflow】的更多相关文章
- tensorflow Tensorboard2-【老鱼学tensorflow】
前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf ...
- tensorflow卷积神经网络-【老鱼学tensorflow】
前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我 ...
- tensorflow安装-【老鱼学tensorflow】
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,Tensor ...
- tensorflow RNN循环神经网络 (分类例子)-【老鱼学tensorflow】
之前我们学习过用CNN(卷积神经网络)来识别手写字,在CNN中是把图片看成了二维矩阵,然后在二维矩阵中堆叠高度值来进行识别. 而在RNN中增添了时间的维度,因为我们会发现有些图片或者语言或语音等会在时 ...
- tensorflow用dropout解决over fitting-【老鱼学tensorflow】
在机器学习中可能会存在过拟合的问题,表现为在训练集上表现很好,但在测试集中表现不如训练集中的那么好. 图中黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲线很精确的区分了所有的训 ...
- tensorflow会话控制-【老鱼学tensorflow】
在tensorflow中,当定义好结构后,就要通过tf.session()来建立运行时的会话. 本例子应该不难理解,我们用tensorflow来计算一下一个1行2列的矩阵和2行1列矩阵的乘积: imp ...
- tensorflow变量-【老鱼学tensorflow】
在程序中定义变量很简单,只要定义一个变量名就可以,但是tensorflow有点类似在另外一个世界,因此需要通过当前的世界中跟tensorlfow的世界中进行通讯,来告诉tensorflow的世界中定义 ...
- tensorflow 传入值-【老鱼学tensorflow】
上个文章中讲述了tensorflow中如何定义变量以及如何读取变量的方式,本节主要讲述关于传入值. 变量主要用于在tensorflow系统中经常会被改变的值,而对于传入值,它只是当tensorflow ...
- tensorflow保存读取-【老鱼学tensorflow】
当我们对模型进行了训练后,就需要把模型保存起来,便于在预测时直接用已经训练好的模型进行预测. 保存模型的权重和偏置值 假设我们已经训练好了模型,其中有关于weights和biases的值,例如: im ...
随机推荐
- Linux 学习 (九) 网络基础
Linux网络管理 学习笔记 ISO/OSI 七层模型 ISO :国际标准化组织 OSI :开放系统互联模型 应用层.表示层.会话层服务于用户 传输层.网络层.数据链路层.物理层服务于实际数据传输 帧 ...
- Python连接SQL Server数据库 - pymssql使用基础
连接数据库 pymssql连接数据库的方式和使用sqlite的方式基本相同: 使用connect创建连接对象 connect.cursor创建游标对象,SQL语句的执行基本都在游标上进行 cursor ...
- windows配置MySQL
mysql安装.启动和基础配置 --windows版本 1.把下载好的zip文件解压到任意目录下,这个目录就是mysql的安装目录. 2.打开目录找到my-default.ini这个配置文件,复制这个 ...
- root密码重置、Linux目录结构和远程连接Linux
一.root如何重置密码 1. 重启 Linux 系统主机并出现引导界面时,按下键盘上的 e 键进入内核编辑界面 2. 在 linux16 参数这行的最后面追加“rd.break”参数,然后按下 Ct ...
- shell脚本自动化部署服务
shell脚本自动化部署 !/bin/bash #export PATH=$PATH:/export/maven/bin run_flag_dir="/data0/shell/deploy_ ...
- 【bfs】最少转弯问题
题目描述 给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山.平地可以通过,高山则不能.现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能 ...
- [python]python3.7中文手册
https://pythoncaff.com/docs/tutorial/3.7.0
- Python【第四篇】函数、内置函数、递归、装饰器、生成器和迭代器
一.函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 1.定义 def 函数名(参数): ...
- 关于opencv的cv2.WINDOW_一类
用法:cv2.namedWindow('窗口标题',默认参数) 默认参数:cv2.WINDOW_AUTOSIZE+cv2.WINDOW_KEEPRATIO+cv2.WINDOW_GUI_EXPANDE ...
- 关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题
关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题,解决方法如下:在数据库连接字串中,增加一个参数:Metadata Pooling=false如“Data Sour ...