我们准备建立一个如下的一个含有一个隐藏层的神经网络去实现回归分析,这个网络应有输入层、输出层、和隐藏层。
最终实现一个一元回归的分析模型,也就会线性回归。
我们会生成一个y = 4 * x + 1 的线性曲线,随机生成输入数(满足偏差为0.05的正态分布的噪声数)。
import tensorflow as tf
import numpy as np
inputX = np.random.rand(3000,1)
noise = np.random.normal(0 , 0.05 , inputX.shape)
outputY = inputX * 4 + 1 + noise
#构建第一层
#weight1 和 bias1是隐藏层的变量 这个变量在后续的图的计算过程中需要根据误差算法不断的重新赋值
weight1 = tf.Variable(np.random.rand(inputX.shape[1],4))#服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1
bias1 = tf.Variable(np.random.rand(inputX.shape[1],4))#.shape【1】每个维度有几个数据 【0】是有几个维度
x1 = tf.placeholder(tf.float64 , [None , 1])#x1的shape是列是1,行不定
y1_ = tf.matmul(x1 , weight1) + bias1
y = tf.placeholder(tf.float64 , [None , 1])
loss = tf.reduce_mean(tf.reduce_sum(tf.square((y1_ - y)) , reduction_indices = [1]))
#tf.reduce_mean计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值损失函数 reduce_sum( ) 是求和函数 使用的是最小二乘法 reduction_indices表示在第一个维度
train = tf.train.GradientDescentOptimizer(0.25).minimize(loss) #选择梯度下降法训练
init = tf.global_variables_initializer()#初始化模型的参数
sess = tf.Session()
sess.run(init)
#开始训练
for i in range(1000):
sess.run(train , feed_dict = {x1 : inputX , y : outputY})
#打印weight 和 bias 这个模型最重要的参数
print(weight1.eval(sess))
print('--------------------------')
print(bias1.eval(sess))
print('--------------------------resul-------------------------')
x_data = np.matrix([[1] , [2] , [3]])#将1 2 3 当做测试数据看输出数据
print(sess.run(y1_,feed_dict = {x1 : x_data}))#调用y1_模型 此时y1_作为模型被存储
至此我们完成了一个这样最简单的神经网络 来完成了线性的预测
上面的代码我们建立了一个这样的神经网络 并且使用带有噪声的数据 使用梯度下降法找到最优的weight和bias 建立了线性模型
类似于下图完成的分类 更加直观
下面我们再添加一个隐藏层
import tensorflow as tf
import numpy as np
inputX = np.random.rand(3000,1)
noise = np.random.normal(0 , 0.05 , inputX.shape)
outputY = inputX * 4 + 1 + noise
#构建第一层
#weight1 和 bias1是隐藏层的变量 这个变量在后续的图的计算过程中需要根据误差算法不断的重新赋值
weight1 = tf.Variable(np.random.rand(inputX.shape[1],4))#服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1
bias1 = tf.Variable(np.random.rand(inputX.shape[1],4))#.shape【1】每个维度有几个数据 【0】是有几个维度
x1 = tf.placeholder(tf.float64 , [None , 1])#x1的shape是列是1,行不定
y1_ = tf.matmul(x1 , weight1) + bias1
#构建第二层
weight2 = tf.Variable(np.random.rand(4,1))#由于和y1_矩阵相乘 所有未4*1矩阵
bias2 = tf.Variable(np.random.rand(inputX.shape[1],1))
y2_ = tf.matmul(y1_ , weight2) + bias2
y = tf.placeholder(tf.float64 , [None , 1])
loss = tf.reduce_mean(tf.reduce_sum(tf.square((y2_ - y)) , reduction_indices = [1]))
#tf.reduce_mean计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值损失函数 reduce_sum( ) 是求和函数 使用的是最小二乘法 reduction_indices表示在第一个维度
train = tf.train.GradientDescentOptimizer(0.25).minimize(loss) #选择梯度下降法训练
init = tf.global_variables_initializer()#初始化模型的参数
sess = tf.Session()
sess.run(init)
#开始训练
for i in range(1000):
sess.run(train , feed_dict = {x1 : inputX , y : outputY})
#打印weight 和 bias 这个模型最重要的参数
print(weight1.eval(sess))
print('--------------------------')
print(weight2.eval(sess))
print('--------------------------')
print(bias1.eval(sess))
print('--------------------------')
print(bias2.eval(sess))
print('--------------------------resul-------------------------')
x_data = np.matrix([[1] , [2] , [3]])#将1 2 3 当做测试数据看输出数据
print(sess.run(y2_,feed_dict = {x1 : x_data}))