本节主要用一个例子来讲述一下基本的tensorflow用法。

在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律。

伪造数据

  1. import numpy as np
  2. # 创建100个随机数
  3. x_data = np.random.rand(100).astype(np.float32)
  4. # 创建最终要模拟的线性公式
  5. y_data = x_data * 0.1 + 0.3

创建模型

在伪造数据之后,我们当作不知道这些数据中蕴含的规律,我们只看到有一堆(x, y)的数据,但其中是什么规律我们不知道,但想通过神经网络的方式来揭示其中的规律。

我们觉得这个规律是线性规律,因此需要有权重值和偏置值,并且先随便设置一下其初始值:

  1. import tensorflow as tf
  2. # tensorflow中的变量系数,1维的初始化为从-1到1之间的一个随机数
  3. Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
  4. # 偏置,其实就是线性方程中的截距值,1维数据,初始化为0
  5. biases = tf.Variable(tf.zeros([1]))
  6. # 在tensorflow中就是根据看到的数值,通过逼近的方式来寻找出数值的规律,最终会把这里的Weights值和biases值设置成接近原始数据中的参数值。
  7. y = Weights * x_data + biases
  8. # 计算损失值为预测值和实际值之差平方和的平均值,损失值越小就表示越接近实际值
  9. loss = tf.reduce_mean(tf.square(y - y_data))
  10. # 神经网络要做的就是通过不停地迭代使这个损失值越来越小,而计算越来越小的方法是通过梯度下降算法来实现的
  11. optimizer = tf.train.GradientDescentOptimizer(0.5)
  12. train = optimizer.minimize(loss)

上面创建了基本的模型,然后需要开始要启动这个模型了,在启动之前,由于我们创建了几个变量,但只是通知TensorFlow说我们拥有这些变量值,但还未进行实际的赋值,要进行实际的赋值,需要通过:

  1. # 初始化所有变量
  2. init = tf.global_variables_initializer()
  3. sess = tf.Session()
  4. # 激活初始化值
  5. sess.run(init)

不停拟合数据

我们可以通过不停给模型数据,让这个模型逐步降低损失值来达到最能拟合输入值的系数:

  1. for step in range(200):
  2. sess.run(train)
  3. # 每隔20步打印一下模拟出来的权重值和偏置值
  4. if (step % 20 == 0):
  5. print(step, sess.run(Weights), sess.run(biases))

输出为:

  1. 0 [ 0.3676317] [ 0.21848023]
  2. 20 [ 0.16707394] [ 0.26867095]
  3. 40 [ 0.11792699] [ 0.29162663]
  4. 60 [ 0.10479139] [ 0.29776204]
  5. 80 [ 0.1012806] [ 0.29940188]
  6. 100 [ 0.10034226] [ 0.29984015]
  7. 120 [ 0.10009148] [ 0.29995728]
  8. 140 [ 0.10002445] [ 0.2999886]
  9. 160 [ 0.10000654] [ 0.29999697]
  10. 180 [ 0.10000175] [ 0.29999918]

从输出结果上来看权重值比较接近于我们原先进行伪造的系数值0.1,而偏置值也比较接近我们伪造的截距值0.3,看来神经网络很好地从一堆数据中揭示了我们预先设置好的规律值。

完整的代码为:

  1. import tensorflow as tf
  2. import numpy as np
  3. # 创建100个随机数
  4. x_data = np.random.rand(100).astype(np.float32)
  5. # 创建最终要模拟的线性公式
  6. y_data = x_data * 0.1 + 0.3
  7. # tensorflow中的变量系数,1维的初始化为从-1到1之间的一个随机数
  8. Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
  9. # 偏置,其实就是线性方程中的截距值,1维数据,初始化为0
  10. biases = tf.Variable(tf.zeros([1]))
  11. # 在tensorflow中就是根据看到的数值,通过逼近的方式来寻找出数值的规律,最终会把这里的Weights值和biases值设置成接近原始数据中的参数值。
  12. y = Weights * x_data + biases
  13. # 计算损失值为预测值和实际值之差平方和的平均值,损失值越小就表示越接近实际值
  14. loss = tf.reduce_mean(tf.square(y - y_data))
  15. # 神经网络要做的就是通过不停地迭代使这个损失值越来越小,而计算越来越小的方法是通过梯度下降算法来实现的
  16. optimizer = tf.train.GradientDescentOptimizer(0.5)
  17. train = optimizer.minimize(loss)
  18. # 初始化所有变量
  19. init = tf.global_variables_initializer()
  20. sess = tf.Session()
  21. # 激活初始化值
  22. sess.run(init)
  23. for step in range(200):
  24. sess.run(train)
  25. # 每隔20步打印一下模拟出来的权重值和偏置值
  26. if (step % 20 == 0):
  27. 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. js实现一键导出Excel

    演示地址:https://xibushijie.github.io/static/ExportToExcel.html <!DOCTYPE html> <html lang=&quo ...

  2. windows下零基础gulp构建

    在学习前,先谈谈大致使用gulp的步骤,给读者以初步的认识.首先当然是安装nodejs,通过nodejs的npm全局安装和项目安装gulp,其次在项目里安装所需要的gulp插件,然后新建gulp的配置 ...

  3. mysql数据去重并排序使用distinct 和 order by 的问题

    比如直接使用: SELECT distinct mobileFROM table_aWHERE code = 123ORDER BY a_ime desc 在本地mysql数据库没有错,在线上的数据库 ...

  4. pgsql事务与并发控制

    事务与并发控制 事务的基本的概念和性质 ACID: 原子性:一个事务要么全部执行,要么全部不执行 一致性:执行事务的时候,数据库从一个一致的状态变更到另一个状态 隔离性: 确保在并发执行的时候,每个事 ...

  5. PageRank算法--从原理到实现

    本文将介绍PageRank算法的相关内容,具体如下: 1.算法来源 2.算法原理 3.算法证明 4.PR值计算方法 4.1 幂迭代法 4.2 特征值法 4.3 代数法 5.算法实现 5.1 基于迭代法 ...

  6. javascript节点移除

    var itemdel = document.getElementById("test"); itemdel.removeChild(lis[0]); 兼容性较好 itemdel. ...

  7. C# 插件化方案(Add-In)

    白话插件框架原理 WPF 插件开发(.NET Framework 3.5 System.Addin) 原文:AddIn Enabled Applications

  8. 【codeforces 765F】Souvenirs

    Description Artsem is on vacation and wants to buy souvenirs for his two teammates. There are n souv ...

  9. Mongodb注入

    0x01 Brief Description 作为nosql(not only sql)数据库的一种,mongodb很强大,很多企业也在用到.相对于sql数据库,nosql数据库有以下优点:简单便捷. ...

  10. cpp智能指针

    weak_ptr<Cls1> wp1; { shared_ptr<Cls1> ptr1(new Cls1);//共享指针 wp1 = ptr1;//临时共享指针 std::co ...