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)

上面创建了基础模型,接下来需要启动模型。在开始之前,由于我们创建了几个变量,我们只是通知我们有这些变量值,但还没有完成实际的赋值。实际赋值需要通过:

# 初始化所有变量
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))

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片