tensorflow 使用 4 非线性回归

 

 

# 输入一个 x 会计算出 y 值    y 是预测值,如果与 真的 y 值(y_data)接近就成功了 

import tensorflow as tf
import numpy as np
# py 的画图工具
import matplotlib.pyplot as plt

# 用 numpy 生成个 200 个属性点  从 -0.5 到 0.5 间平均生成 200 个点
#x_data = np.linspace(-0.5, 0.5, 200)      # 这只是生成了一维的数组
# 用下边这句可以生成二维数组
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]

# 生成随机值,和 x_data 的形状是一样的 ( 噪点 )
noise = np.random.normal(0, 0.02, x_data.shape)

# x_data 的平方+随机数
y_data = np.square( x_data ) + noise


# 定义二个占位符
x = tf.placeholder( tf.float32, [None, 1] )  # [None, 1] 行不定,列只有一列
y = tf.placeholder( tf.float32, [None, 1] )

    
# 构建神经网络中间层                    一行十列
Weights_L1 = tf.Variable( tf.random_normal([1, 10]))
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
# 得出最后的预测结果
pred = tf.nn.tanh( Wx_plus_b_L2 )


# 二次代价函数
loss = tf.reduce_mean( tf.square(y - pred) )


# 梯度下降法的优化器                           最小化代价函数
train = tf.train.GradientDescentOptimizer( 0.2 ).minimize( loss )


with tf.Session() as sess:
  # 初始化变量
  sess.run( tf.global_variables_initializer() )
  # 训练 2000 次
  for _ in range( 2000 ):
    sess.run( train, feed_dict={x:x_data, y:y_data} )


  # 得到预测值
  value = sess.run( pred, feed_dict={x:x_data} )
  # 用画图形式展现
  
  plt.figure()
  plt.scatter(x_data, y_data)
  plt.plot(x_data, value, 'r-', lw=5)
  plt.show()
  

  

 

posted @ 2019-04-01 17:34  25班Ph201805201  阅读(237)  评论(0编辑  收藏  举报