TensorFlow小案例

共计 1365 个字符,预计需要花费 4 分钟才能阅读完成。

在这个小案例里,我们会随机生成一个常见的线性函数,然后使用TensorFlow,训练自己构造的线性模型,来使它无限接近于这个真实的模型。废话不多说,直接撸代码

导包

import numpy as np
import tensorflow as tf

使用numpy生成200个随机点

x_data = np.random.rand(100)
// 生成一个真实的模型
y_data = x_data * 4.4 + 16.7   // 这里的4.4和16.7都是随便设定,可以随便换

构造一个线性模型

// 定义变量,初始值随意设定
b = tf.Variable(0.)
k = tf.Variable(0.)
// 构造线性模型
y = x_data * k + b

最小化代价函数

// 二次代价函数
// loss = 误差平方的平均值(误差 = 真实值y_data - 预测值y)
loss = tf.reduce_mean(tf.square(y_data - y))

// 定义一个梯度下降法来进行训练的优化器
// 0.2是我设置的一个learning_rate,学习率,一般不宜设定太大,容易出现损失值爆炸,0.01~0.8之间为宜
optimizer = tf.train.GradientDescentOptimizer(0.2)  
// 最小化代价函数
train = optimizer.minimize(loss)

开始训练

// 因为上面定义了变量,所以需要进行变量初始化
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for step in range(201):
        # 通过200次的训练,让我们构造的线性模型无限接近于真实的模型,在这里就是k和b的值无限接近真实值
        sess.run(train)
        # 这里只是为了每20次打印一下变量,方便查看训练的过程变化
        if step % 20 == 0:
            print(step, sess.run([k, b]))

这里运行下来会有一个警告

I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

警告指出你的CPU支持AVX运算加速了线性代数计算,即点积,矩阵乘法,卷积等。可以从源代码安装TensorFlow来编译,当然也可以选择关闭

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

查看训练结果

0 [14.907639, 26.716526]
20 [5.327487, 16.596209]
40 [4.558625, 16.620554]
60 [4.431923, 16.682026]
80 [4.4065795, 16.696241]
100 [4.40136, 16.699224]
120 [4.4002814, 16.699839]
140 [4.400058, 16.699966]
160 [4.400011, 16.699993]
180 [4.400005, 16.699997]
200 [4.400005, 16.699997]

可以看到,我们构造的线性模型的k和b已经基本等于在最开始定义的那个函数的4.4和16.7了,完事!

正文完
 
Dustin
版权声明:本站原创文章,由 Dustin 2020-01-11发表,共计1365字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。