TensorFlow学习(5)——线性回归

版权声明:转载请保留出处,谢谢! https://blog.csdn.net/zhangdongren/article/details/83539662
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# =======================第一步、样本======================================
# 从-0.5到0.5之间生成200个随机点(现在只是一个一维的数据)
# 但是我们需要用到的是二维的数据因此在后面加上[:, np.newaxis]
# 其中我们生成的数据存在":"之中,其实就是200行一列
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
# 生成噪点,x_data.shape表示他的分布跟x_data的分布是一样的
noise = np.random.normal(0, 0.02, x_data.shape)
# U型分布
y_data = np.square(x_data) + noise

# =====================第二步、构造神经网络==========================
# 构造一个拥有三个网络层的神经网络,第一层有一个神经元(因为只有一个输入)
# 第二次拥有十个神经元,第三层拥有一个神经元(因为只有一个输出)

# ------------------------输入层-------------------------------
# 行数不定,只有一列
x = tf.placeholder(tf.float32, [None, 1])
y = tf.placeholder(tf.float32, [None, 1])

# -----------------------中间层-------------------------------
# 权重是一行十列,因为连接着输入层
Weights_L1 = tf.Variable(tf.random_normal([1,10]))
# 偏置值默认为0,因为他有十个神经元所以也有十个偏置值
biases_L1 = tf.Variable(tf.zeros([1,10]))
# 计算第一层神经元
Wx_plus_b_L1 = tf.matmul(x, Weights_L1) + biases_L1
# 每一层神经层之间用激活函数连着,所以这里定义激活函数
L1 = tf.nn.tanh(Wx_plus_b_L1)

# -----------------------输出层-------------------------------
# 权重,因为这里是输出层,所以只有一列
Weights_L2 = tf.Variable(tf.random_normal([10,1]))
# 偏置值,输入一个
biases_L2 = tf.Variable(tf.zeros([1,1]))
# 向量相乘
Wx_plus_b_L2 = tf.matmul(L1, Weights_L2) + biases_L2
# 再加入激活函数(其实就是输出结果)
prediction = tf.nn.tanh(Wx_plus_b_L2)

# =====================第三步、定义二次代价函数==========================
loss = tf.reduce_mean(tf.square(y_data-prediction))

# =====================第四步、定义优化器==========================
optimiter = tf.train.GradientDescentOptimizer(0.01)

# =====================第五步、最小化代价函数==========================
train = optimiter.minimize(loss)

# =====================第六步、初始化变量、定义Session并训练==========================
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for step in range(10000):
        sess.run(train, feed_dict={x:x_data, y:y_data})
        print(step, sess.run(loss, feed_dict={x:x_data, y:y_data}))

    prediction_value = sess.run(prediction, feed_dict={x:x_data})
    print(prediction_value)
    # 画图
    plt.figure()
    # 散点图来把样本都画出来
    plt.scatter(x_data, y_data)
    # 画我的预测图,r-表示红色实线,lw表示线的宽度
    plt.plot(x_data, prediction_value, 'r-', lw=5)
    # 显示图片
    plt.show()

////////////////////////////////////////////////////结束线/////////////////////////////////////////////////////////

欢迎大家加入Q群讨论:463255841

////////////////////////////////////////////////////结束线/////////////////////////////////////////////////////////

展开阅读全文

没有更多推荐了,返回首页