引入相关库,定义神经网络层
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 构造添加一个神经层的函数
def add_layer(inputs, in_size, out_size, activation_function=None):
Weights = tf.Variable(tf.random_normal([in_size, out_size])) #权重矩阵[列,行]
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 偏置向量[列,行]
= tf.matmul(inputs, Weights) + biases # w*x+b(未激活)
if activation_function is None: # 线性关系(不使用激活函数)
outputs =
else:
outputs = activation_function()# 非线性激活
return outputs
生成些输入数据并导入网路
因为要拟合平面曲线,输入x和输出y均为一维数据
# 导入数据,这里的x_data和y_data并不是严格的一元二次函数的关系
# 因为我们多加了一个noise,这样看起来会更像真实情况
x_data = np.linspace(-1,1,300, dtype=np.float32)[:, np.newaxis]#300行,1个特性
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32)# 均值,方差,形状
y_data = np.power(x_data,3)*10 - 8*noise # y = x^2-0.5+noise
# 利用占位符定义我们所需的神经网络的输入
# None代表无论输入有多少都可以,因为输入只有一个特征,所以这里是1
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
搭建网络
输入层:神经元个数1(输出1)
隐藏层1:神经元个数8(输入1,输出8)
隐藏层2:神经元个数8(输入8,输出8)
输出层:神经元个数1(输入8,输出1)
# 定义隐藏层【l1】和【l2】,利用之前的add_layer()函数
l1 = add_layer(xs, 1, 8, activation_function=tf.nn.sigmoid) # 输入层,输入,输出
l2 = add_layer(l1, 8, 8, activation_function=tf.nn.sigmoid) # 输入层,输入,输出
# 定义输出层【prediction】。输入就是隐藏层的输出——l1,输入有10层,输出有1层
prediction = add_layer(l2, 8, 1, activation_function=None)