我是靠谱客的博主 爱笑星月,这篇文章主要介绍【Python机器学习】神经网络中全连接层与线性回归的讲解及实战(Tensorflow、MindSpore平台 附源码)全连接层与线性回归,现在分享给大家,希望可以做个参考。

需要全部代码请点赞关注收藏后评论区留言私信~~~

全连接层与线性回归

神经网络模型也是参数学习模型,因为对它的学习只是得到神经网络参数的最优值,而神经网络的结构必须事先设计好。如果确实不能通过改进学习过程来达到理想效果,则要重新设计神经网络的结构。

层状神经网络的隐层和输出层具有处理信息的能力,它们又可细分为全连接层、卷积层、池化层、LSTM层等等,通过适当排列可以组合成适应不同任务的网络。

全连接层是层状神经网络最基本的层,本小节从线性回归模型入手,深入讨论全连接层。

线性回归模型改写为:

 

神经元模型

 

可以将线性回归看成是神经元模型,其阈值θ=w^(0),其激励函数为等值函数f(x)=x,即该神经元是没有激励函数的特殊神经元。

先定义一个二维平面上的线性目标函数并用它来生成训练样本,再定义一个代表线性回归模型的神经网络,然后用训练样本对该网络进行训练,并在训练的过程中动态显示线性模型的拟合过程。

效果如下 

 

 代码如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
### 定义训练样本生成函数 import numpy as np np.random.seed(1101) # 指定随机数种子,产生相同的随机数,便于观察试验结果   def f(x, w=3.0, b=1.0): # 目标函数 return x * w + b   def get_data(num): for _ in range(num): x = np.random.uniform(-10.0, 10.0) noise = np.random.normal(0, 3) y = f(x) + noise yield np.array([x]).astype(np.float32), np.array([y]).astype(np.float32) ### 生成训练样本并增强 from mindspore import dataset as ds import matplotlib.pyplot as plt   data_number = 80 # 样本总数 batch_size = 16 # 每批训练样本数(批梯度下降法) repeat_size = 1   train_data = list(get_data(data_number)) X, y = zip(*train_data) plt.scatter(X, y, color="black", s=10) xx = np.arange(-10.0, 10, 1) yy = f(xx) plt.plot(xx, yy, color="red", linewidth=1, linestyle='-') plt.show()

按上述方法构建的层被称为全连接层(fully connected layers),它是层状神经网络最基本的层。

全连接层的每一个节点都与上一层的所有节点相连。设前一层的输出为X=(x_1, x_2,…,x_i,…,x_m),本层的输出为Y=(y_1, y_2,…,y_j,…,y_n),其中:

 

定义连接系数矩阵:

 

和阈值系数向量:

 

全连接层的计算可以写成矩阵形式:

 

在全连接层中,连接系数和阈值系数是要训练的参数,它们一共有m×n+n个。

动态拟合过程,当训练到第十轮左右的时候模型拟合度已经十分高了 

 

代码如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import numpy as np np.random.seed(1101) # 指定随机数种子,产生相同的随机数,便于观察试验结果 def f(x, w=3.0, b=1.0): # 目标函数 return x * w + b def get_data(num): for _ in range(num): x = np.random.uniform(-10.0, 10.0) noise = np.random.normal(0, 3) y = f(x) + noise yield np.array([x]).astype(np.float32), np.array([y]).astype(np.float32) from mindspore import dataset as ds import matplotlib.pyplot as plt data_number = 80 # 样本总数 batch_size = 16 # 每批训练样本数(批梯度下降法) repeat_size = 1 train_data = list(get_data(data_number)) X, y = zip(*train_data) plt.scatter(X, y, color="black", s=10) xx = np.arange(-10.0, 10, 1) yy = f(xx) plt.plot(xx, yy, color="red", linewidth=1, linestyle='-') plt.show() import time from mindspore import Tensor def plot_model_and_datasets(net, train_data): weight = net.trainable_params()[0] bias = net.trainable_params()[1] x = np.arange(-10, 10, 1) y = x * Tensor(weight).asnumpy()[0][0] + Tensor(bias).asnumpy()[0] x1, y1 = zip(*train_data) x_target = x y_target = f(x_target) plt.axis([-11, 11, -20, 25]) plt.scatter(x1, y1, color="black", s=10) plt.plot(x, y, color="blue", linestyle=':', linewidth=2) plt.plot(x_target, y_target, color="red") plt.show() time.sleep(0.02) from IPython import display from mindspore.train.callback import Callback class ImageShowCallback(Callback): # 回调类 def __init__(self, net, train_data): self.net = net self.train_data = train_data def step_end(self, run_context): plot_model_and_datasets(self.net, self.train_data) display.clear_output(wait=True)

 创作不易 觉得有帮助请点赞关注收藏~~~

最后

以上就是爱笑星月最近收集整理的关于【Python机器学习】神经网络中全连接层与线性回归的讲解及实战(Tensorflow、MindSpore平台 附源码)全连接层与线性回归的全部内容,更多相关【Python机器学习】神经网络中全连接层与线性回归的讲解及实战(Tensorflow、MindSpore平台内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部