广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
SIEMENS江苏省宿迁市 西门子代理商——西门子华东一级总代理

平面曲线属于非线性函数,至少需要 3 层的神经网络(输入层,隐藏层x1,输出层)来实现,为达到较好的效果,可尝试更多层,下面的例子使用了2层隐藏层,采用最基本的全连接形式,隐藏层的神经元个数没有严格要求,根据实际项目选择,下面例子选用8个。

下面通过代码实现:

引入相关库,定义神经网络层

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)


展开全文
相关产品
拨打电话 微信咨询 发送询价