微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

2.8 使用Tensorflow实现简单机器学习

2.8 使用Tensorflow实现简单机器学习

前面我们介绍了使用Numpy和PyTorch实现简单的回归分析任务,这次我们使用Tensorflow来实现相同的任务。我们使用TensorFlow1.0版本的,使用静态图。代码如下:

# 1、导入库及生成训练数据
import tensorflow as tf
import numpy as np
from matplotlib import pyplot as plt
# 生成训练数据
np.random.seed(100)
x = np.linspace(-1, 1, 100).reshape(100, 1)
y = 3 * np.power(x, 2) + 2 + 0.2 * np.random.rand(x.size).reshape(100, 1)
# 2、初始化参数
# 创建两个占位符,分别用来存放输入数据x和目标值y
# 运行计算图时,导入数据
x1 = tf.placeholder(tf.float32, shape=(None, 1))
y1 = tf.placeholder(tf.float32, shape=(None, 1))
# 创建权重变量w和b,并用随机值初始化
# Tesnorflow的变量在整个计算图保存其值
w = tf.Variable(tf.random_uniform([1], 0, 1.0))
b = tf.Variable(tf.zeros([1]))
# 3、实现前向传播及损失函数
# 前向传播,计算预测值
y_pred = np.power(x1, 2) * w + b
# 计算损失值
loss = tf.reduce_mean(tf.square(y-y_pred))
# 计算有关参数w、b关于损失函数的梯度
grad_w, grad_b = tf.gradients(loss, [w, b])
# 用梯度下降法更新参数
# 执行计算图时给new_w1和new_b1赋值
# 对Tensorflow来说,更新参数是计算图的一部分
# 而pytorch,这部分属于计算图之外
learning_rate = 0.01
new_w = w.assign(w - learning_rate * grad_w)
new_b = b.assign(b - learning_rate * grad_b)
# 初始化所有变量
init = tf.global_variables_initializer()
# 4、训练模型
# 已构建计算图,接下来创建会话来执行计算图
with tf.Session() as sess:
    sess.run(init)
    for step in range(2000):
        # 循环执行计算图,需要把x1,y1赋给x和y
        # 每次执行计算图,需要计算关于new_w和new_b的损失值
        # 返回numpy多维数组
        loss_value, v_w, v_b = sess.run([loss, new_w, new_b],
                                        Feed_dict={x1: x, y1: y})
        if step % 200 == 0:
            print("第{}次迭代,损失值、权重、偏移量分别为{:.4f},{},{}"
                  .format(step, loss_value, v_w, v_b))
# 5、可视化结果
plt.figure()
plt.scatter(x, y)
plt.plot(x, v_b + v_w*x**2)
第0次迭代,损失值、权重、偏移量分别为8.2285,[0.9523836],[0.05597141]
第200次迭代,损失值、权重、偏移量分别为0.0660,[2.170021],[2.3723235]
第400次迭代,损失值、权重、偏移量分别为0.0353,[2.4069746],[2.3136168]
第600次迭代,损失值、权重、偏移量分别为0.0199,[2.570806],[2.253223]
第800次迭代,损失值、权重、偏移量分别为0.0119,[2.6886544],[2.2095635]
第1000次迭代,损失值、权重、偏移量分别为0.0078,[2.7734795],[2.1781359]
第1200次迭代,损失值、权重、偏移量分别为0.0056,[2.834531],[2.155516]
第1400次迭代,损失值、权重、偏移量分别为0.0045,[2.8784747],[2.139235]
第1600次迭代,损失值、权重、偏移量分别为0.0040,[2.9101052],[2.127516]
第1800次迭代,损失值、权重、偏移量分别为0.0037,[2.9328716],[2.119081]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐