tensorflow之线性回归

主要是得注意输入的数据格式和placeholder的用法,当然了,还有weights和bias的初始化
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

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

x = np.linspace(-10, 10, 50)[:, np.newaxis]
noise = np.random.normal(0, 0.5, x.shape)
y=x*0.5+noise  #加上一个0~1内的随机数。用来模拟噪声
w=tf.Variable(tf.random_normal([1,1]))
b=tf.Variable(tf.zeros([1,1]))
#定义权重


x_input=tf.placeholder(tf.float32, [None, 1])
y_output=tf.placeholder(tf.float32, [None, 1])

# y_predict=w*x+b
#
#
# plt.figure()
# plt.scatter(x,y,c='green',s=50,marker='o')#散点图
# plt.plot(x, y, color="red")   #画一条直线
# plt.show()

#5个样本作为一个batch
def get_next_batch():
    train_indices=np.random.choice(range(len(x)),50)
    train_x=x[train_indices]
    train_y=y[train_indices]
    return train_x,train_y


def output():
    y_predict=tf.add(tf.matmul(x_input,w),b)
    return y_predict

sess=tf.Session()
y_predict=output()
loss=(tf.reduce_mean(tf.reduce_sum(tf.square(y_output-y_predict))))/50
train=tf.train.GradientDescentOptimizer(0.005).minimize(loss)

init=tf.global_variables_initializer()
sess.run(init)

print(sess.run(w))
print('_______')
for i in range(100):  #500次迭代
    train_x,train_y=get_next_batch()
    sess.run(train,feed_dict={x_input:train_x,y_output:train_y})
    if i%30==0:
        result_w=sess.run(w)
        result_b=sess.run(b)
        y_predict=result_w[0][0]*x+result_b
        plt.figure()
        plt.scatter(x,y,c='green',s=50,marker='o')#散点图
        plt.plot(x, y_predict, color="red")   #画一条直线
        plt.show()

猜你喜欢

转载自blog.csdn.net/tianguiyuyu/article/details/80294265
今日推荐