跟我学算法-tensorflow 实现线性拟合

TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。TensorFlow™ 最初是由 Google Brain 团队(隶属于 Google 的 AI 部门)中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域

接下来我们通过一个线性拟合的简单实例来说明一下

第一步,通过np.random.normal 创造一批高斯分布的数据

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf


num_points = 1000
vector_sector = []

# 创造一1000个点
for num_point in range(num_points):
    x = np.random.normal(0.0, 0.55)
    y = x*0.1 + 0.3 + np.random.normal(0, 0.03)
    vector_sector.append([x, y])
#进行添加赋值操作
x_data = [v[0] for v in vector_sector]
y_data = [v[1] for v in vector_sector]

第二步: 初始化参数和使用估计值和真实值的均方误差来表示loss

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='W')
# 产生一个初始值为0 的b值
b = tf.Variable(tf.zeros([1]), name='b')
# 构造线性函数
y = W * x_data + b
print(np.shape(y))
# 以预估值y和实际值y_data之间的均方误差作为损失
loss = tf.reduce_mean(tf.square(y-y_data), name='loss')

第三步: 初始化模型,并进行迭代降低loss,优化模型

optimizer = tf.train.GradientDescentOptimizer(0.5)
# 训练的时候就是最小化这个参数
train = optimizer.minimize(loss)

#进行初始化
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
# 打印当前值
print('W', sess.run(W), 'b', sess.run(b), 'loss', sess.run(loss))

#循环20次,训练train,降低loss
for i in range(20):
    sess.run(train)
    print(print('W', sess.run(W), 'b', sess.run(b), 'loss', sess.run(loss)))

第四步: 做出拟合曲线的图

# 做散点图的拟合曲线
plt.scatter(x_data, y_data, c='r')
plt.plot(x_data, x_data*sess.run(W)+ sess.run(b))
plt.show()

原文地址:https://www.cnblogs.com/my-love-is-python/p/9564784.html