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))

原文地址:https://www.cnblogs.com/dreampursuer/p/8000322.html

时间: 2024-07-29 23:56:07

tensorflow例子-【老鱼学tensorflow】的相关文章

tensorflow 传入值-【老鱼学tensorflow】

上个文章中讲述了tensorflow中如何定义变量以及如何读取变量的方式,本节主要讲述关于传入值. 变量主要用于在tensorflow系统中经常会被改变的值,而对于传入值,它只是当tensorflow系统运行时预先设置的值,然后在运行期间不会被改变,有点类似函数中的不可变的输入参数. 传入值同常量之间的差别是:常量在tensorflow系统运行之前就已经确定了的值,无法对其进行任何的改变. 而传入值或称为placeholder是在系统运行前需要对其进行设置相应的值. 我们来看一个例子,这个例子只

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

在机器学习中可能会存在过拟合的问题,表现为在训练集上表现很好,但在测试集中表现不如训练集中的那么好. 图中黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲线很精确的区分了所有的训练数据,但是并没有描述数据的整体特征,对新测试数据的适应性较差. 一般用于解决过拟合的方法有增加权重的惩罚机制,比如L2正规化,但在本处我们使用tensorflow提供的dropout方法,在训练的时候, 我们随机忽略掉一些神经元和神经联结 , 是这个神经网络变得"不完整". 用一个不完整

tensorflow建造神经网络-【老鱼学tensorflow】

上次我们添加了一个add_layer函数,这次就要创建一个神经网络来预测/拟合相应的数据. 下面我们先来创建一下虚拟的数据,这个数据为二次曲线数据,但同时增加了一些噪点,其图像为: 相应的创建这些伪造数据的代码为: import numpy as np # 创建一列(相当于只有一个属性值),300行的x值,这里np.newaxis用于新建出列数据,使其shape为(300, 1) x_data = np.linspace(-1, 1, 300)[:,np.newaxis] # 增加噪点,噪点的均

tensorflow分类-【老鱼学tensorflow】

前面我们学习过回归问题,比如对于房价的预测,因为其预测值是个连续的值,因此属于回归问题. 但还有一类问题属于分类的问题,比如我们根据一张图片来辨别它是一只猫还是一只狗.某篇文章的内容是属于体育新闻还是经济新闻等,这个结果是有一个全集的离散值,这类问题就是分类问题. 我有时会把回归问题看成是分类问题,比如对于房价值的预测,在实际的应用中,一般不需要把房价精确到元为单位的,比如对于均价,以上海房价为例,可以分为:5000-10万这样的一个范围段,并且以1000为单位就可以了,尽管这样分出了很多类,但

为何学习matplotlib-【老鱼学matplotlib】

这次老鱼开始学习matplotlib了. 在上个pandas最后一篇博文中,我们已经看到了用matplotlib进行绘图的功能,这次更加系统性地多学习一下关于matplotlib的功能. 在matlab中,其拥有非常强大的显示图表的功能. 在python中,就提供了一个类似matlab软件中的画图库matplotlib,其基本上是模仿matlab中的画图函数. 官网中介绍的显示图表的例子见:http://matplotlib.org/gallery/index.html 要使用,就必须先进行安装

pandas处理丢失数据-【老鱼学pandas】

假设我们的数据集中有缺失值,该如何进行处理呢? 丢弃缺失值的行或列 首先我们定义了数据集的缺失值: import pandas as pd import numpy as np dates = pd.date_range("2017-01-08", periods=6) data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C&

sklearn交叉验证-【老鱼学sklearn】

交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始的子集被称为训练集.而其它的子集则被称为验证集或测试集.交叉验证是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize). 我们以分类花的例子来看下: # 加载iris数据集 from sklearn.datasets import load_iris from s

sklearn交叉验证2-【老鱼学sklearn】

过拟合 过拟合相当于一个人只会读书,却不知如何利用知识进行变通. 相当于他把考试题目背得滚瓜烂熟,但一旦环境稍微有些变化,就死得很惨. 从图形上看,类似下图的最右图: 从数学公式上来看,这个曲线应该是阶数太高的函数,因为一般任意的曲线都能由高阶函数来拟合,它拟合得太好了,因此丧失了泛化的能力. 用Learning curve 检视过拟合 首先加载digits数据集,其包含的是手写体的数字,从0到9: # 加载数据 digits = load_digits() X = digits.data y

pandas基本介绍-【老鱼学pandas】

前面我们学习了numpy,现在我们来学习一下pandas. Python Data Analysis Library 或 pandas 主要用于处理类似excel一样的数据格式,其中有表头.数据序列号以及实际的数据,而numpy就仅仅包含了实际的数据. 安装 直接输入: pip3 install pandas 最基本用法 import pandas as pd s = pd.Series([1, 2, 5, 6]) print(s) 输出: 0 1 1 2 2 5 3 6 dtype: int6