【Python机器学习】神经网络中全连接层与线性回归的讲解及实战(Tensorflow、MindSpore平台 附源码)

简介: 【Python机器学习】神经网络中全连接层与线性回归的讲解及实战(Tensorflow、MindSpore平台 附源码)

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

全连接层与线性回归

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

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

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

线性回归模型改写为:

神经元模型

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

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

效果如下

代码如下

### 定义训练样本生成函数
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个。

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

代码如下

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)

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

相关文章
|
3天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
4天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
12 2
|
11天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
52 6
|
12天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
37 4
|
13天前
|
物联网 5G 数据中心
|
4天前
|
机器学习/深度学习 人工智能 安全
人工智能与机器学习在网络安全中的应用
人工智能与机器学习在网络安全中的应用
19 0
|
1天前
|
SQL 安全 物联网
网络安全与信息安全:深入探讨网络漏洞、加密技术及安全意识###
网络安全与信息安全是当今数字化时代的重要议题。本文将详细探讨网络安全和信息安全的差异,重点介绍常见的网络漏洞、加密技术以及如何提升用户和组织的安全意识。通过具体案例和技术分析,帮助读者理解这些关键概念,并提供实用的建议以应对潜在的网络威胁。 ###
|
2天前
|
安全 网络安全 API
揭秘网络世界的守护神:网络安全与信息安全的深度剖析
【10月更文挑战第36天】在数字时代的洪流中,网络安全和信息安全如同守护神一般,保护着我们的数据不受侵犯。本文将深入探讨网络安全漏洞的成因、加密技术的奥秘以及提升个人安全意识的重要性。通过分析最新的攻击手段、介绍先进的防御策略,并分享实用的安全实践,旨在为读者呈现一个全方位的网络安全与信息安全知识图谱。让我们一同揭开网络世界的神秘面纱,探索那些不为人知的安全秘籍。
13 6
|
1天前
|
SQL 安全 算法
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第37天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,提高自己的网络安全防护能力。
6 4