小白教你快速建立一个平面拟合

小白教你快速建立一个平面拟合

平面方程为y=wx+b

源代码

# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np

# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
from numpy.core.tests.test_mem_overlap import xrange
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300# 构造一个线性模型
# add
tf.compat.v1.disable_eager_execution()
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random.uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b
# 最小化方差
loss = tf.reduce_mean(input_tensor=tf.square(y - y_data))
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# 初始化变量
init = tf.compat.v1.initialize_all_variables()

# 启动图 (graph)
sess = tf.compat.v1.Session()
sess.run(init)

# 拟合平面
for step in xrange(0, 201):
    sess.run(train)
    if step % 20 == 0:
        print("step={},sess.run.W={},sess.run.b{}".format(step, sess.run(W), sess.run(b)))

结果:

step=0,sess.run.W=[[-0.25028533  0.9614625 ]],sess.run.b[0.20073248]
step=20,sess.run.W=[[0.08420115 0.35202792]],sess.run.b[0.23090774]
step=40,sess.run.W=[[0.11288048 0.23936322]],sess.run.b[0.27306214]
step=60,sess.run.W=[[0.10757586 0.21218452]],sess.run.b[0.28974822]
step=80,sess.run.W=[[0.10324184 0.20419295]],sess.run.b[0.2961337]
step=100,sess.run.W=[[0.1012742  0.20151742]],sess.run.b[0.29854694]
step=120,sess.run.W=[[0.10048636 0.200561  ]],sess.run.b[0.29945463]
step=140,sess.run.W=[[0.10018364 0.20020922]],sess.run.b[0.29979542]
step=160,sess.run.W=[[0.10006903 0.20007828]],sess.run.b[0.29992327]
step=180,sess.run.W=[[0.10002591 0.20002933]],sess.run.b[0.29997122]
step=200,sess.run.W=[[0.10000972 0.200011  ]],sess.run.b[0.2999892]

训练10次 每次步数为20

训练结果为:符合预期

W=[0.100,0.200] b=0.3

猜你喜欢

转载自blog.csdn.net/keny88888/article/details/105916854
今日推荐