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维数据,初始化为0biases = 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 tfimport 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维数据,初始化为0biases = 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))

分享给朋友:
您可能感兴趣的文章:
随机阅读: