本节主要用一个例子来讲述一下基本的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】的更多相关文章

  1. tensorflow Tensorboard2-【老鱼学tensorflow】

    前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf ...

  2. tensorflow卷积神经网络-【老鱼学tensorflow】

    前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我 ...

  3. tensorflow安装-【老鱼学tensorflow】

    TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,Tensor ...

  4. tensorflow RNN循环神经网络 (分类例子)-【老鱼学tensorflow】

    之前我们学习过用CNN(卷积神经网络)来识别手写字,在CNN中是把图片看成了二维矩阵,然后在二维矩阵中堆叠高度值来进行识别. 而在RNN中增添了时间的维度,因为我们会发现有些图片或者语言或语音等会在时 ...

  5. tensorflow用dropout解决over fitting-【老鱼学tensorflow】

    在机器学习中可能会存在过拟合的问题,表现为在训练集上表现很好,但在测试集中表现不如训练集中的那么好. 图中黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲线很精确的区分了所有的训 ...

  6. tensorflow会话控制-【老鱼学tensorflow】

    在tensorflow中,当定义好结构后,就要通过tf.session()来建立运行时的会话. 本例子应该不难理解,我们用tensorflow来计算一下一个1行2列的矩阵和2行1列矩阵的乘积: imp ...

  7. tensorflow变量-【老鱼学tensorflow】

    在程序中定义变量很简单,只要定义一个变量名就可以,但是tensorflow有点类似在另外一个世界,因此需要通过当前的世界中跟tensorlfow的世界中进行通讯,来告诉tensorflow的世界中定义 ...

  8. tensorflow 传入值-【老鱼学tensorflow】

    上个文章中讲述了tensorflow中如何定义变量以及如何读取变量的方式,本节主要讲述关于传入值. 变量主要用于在tensorflow系统中经常会被改变的值,而对于传入值,它只是当tensorflow ...

  9. tensorflow保存读取-【老鱼学tensorflow】

    当我们对模型进行了训练后,就需要把模型保存起来,便于在预测时直接用已经训练好的模型进行预测. 保存模型的权重和偏置值 假设我们已经训练好了模型,其中有关于weights和biases的值,例如: im ...

随机推荐

  1. Django+Vue打造购物网站(五)

    注册和登陆 drf的认证 http://www.django-rest-framework.org/api-guide/authentication/ settings.py文件的配置 INSTALL ...

  2. rt-thread 之组件与设备初始化配置

    @2019-03-08 [小记] rt-thread 初始化配置有两个分支: 第一,板级设备初始化 rt_components_board_init() 第二,内核组件初始化 rt_component ...

  3. 清北学堂Day2

    算数基本定理: 1.整数及其相关 2.唯一分解定理 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>= ...

  4. 报表工具-ECharts 特性介绍

    ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,S ...

  5. 第四节:MVC中AOP思想的体现(四种过滤器)并结合项目案例说明过滤器的实际用法

    一. 简介 MVC中的过滤器可以说是MVC框架中的一种灵魂所在,它是MVC框架中AOP思想的具体体现,所以它以面向切面的形式无侵入式的作用于代码的业务逻辑,与业务逻辑代码分离,一经推出,广受开发者的喜 ...

  6. 散度、旋度与 Laplacian

    $$\bex -\lap {\bf u}=\rot \rot {\bf u}-\n \Div {\bf u}. \eex$$

  7. java Concurrent并发容器类 小结

    Java1.5提供了多种并发容器类来改进同步容器的性能. 同步容器将所有对容器的访问都串行化,以实现他们的线程安全性.这种方法的代价是严重降低并发性,当多个线程竞争容器的锁时,吞吐量将严重减低.  一 ...

  8. Shpinx在PHPCMS里的使用及配置

    现在可以用最新版的Sphinx版本 网址:http://sphinxsearch.com/downloads/release/ 我使用rpm方式: 下载RHEL/CentOS 6.x x86_64 R ...

  9. 用sklearn 实现linear regression

    基本的regression算法有四种方法可以实现,分别是下面四种 LinearRegressionRidge (L2 regularization)Lasso (L1 regularization)E ...

  10. luogu P5300 [GXOI/GZOI2019]与或和

    传送门 题目涉及按位与以及按位或运算,所以可以拆位考虑,枚举某个二进制位,然后某个位置如果那个数的第\(i\)位是\(0\)就放\(0\),否则放\(1\),这一位的贡献就是位运算后值为\(1\)的子 ...