本节主要用一个例子来说明基本用法。
在这个例子中,我们首先伪造一些线性数据点。事实上,这些数据中隐藏着一些规律,但我们假装不知道规律是什么,然后我们想通过神经网络揭示规律。
伪造数据
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))
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容