机器学习中的神经网络重难点!纯干货(下篇)

纯干货

目录

长短时记忆网络

基本原理

一个示例

自注意力模型

基本原理

自注意力机制

具体步骤

一个案例

生成对抗网络

基本原理

一个案例

长短时记忆网络

LSTM就像一个有记忆的人,可以记住重要的信息并且忘记不重要的。

特别擅长处理长序列数据,因为它可以在很长的序列中捕捉和保持关键信息,而不会被无关信息淹没。

基本原理

LSTM的核心思想是细胞状态(cell state)和门(gates)的概念。细胞状态就像LSTM的记忆,它可以传递信息并在必要时保留或删除。

门用于控制信息的流动,包括遗忘不必要的信息和记住重要的信息。

LSTM的工作过程分为三个主要步骤:遗忘、存储和更新。

1、遗忘:细胞状态决定哪些信息应该被遗忘,哪些信息应该保留。门控制着遗忘的过程。

2、存储:新的信息被添加到细胞状态中,以更新记忆。门还可以控制信息的存储。

3、更新:基于当前的输入和细胞状态,LSTM生成新的输出和细胞状态,这将成为下一个时间步的输入。

一个示例

使用Python和TensorFlow来构建一个LSTM模型,并将其应用于文本生成。


import tensorflow as tf
import numpy as np# 创建示例数据
text = "这是一个示例文本。LSTM将学会预测下一个字符。"
chars = sorted(list(set(text)))
char_to_index = {char: index for index, char in enumerate(chars)}
index_to_char = {index: char for index, char in enumerate(chars)}# 准备数据
max_sequence_length = 100
sequences = []
next_chars = []
for i in range(0, len(text) - max_sequence_length, 1):sequences.append(text[i:i + max_sequence_length])next_chars.append(text[i + max_sequence_length])X = np.zeros((len(sequences), max_sequence_length, len(chars)), dtype=np.bool)
y = np.zeros((len(sequences), len(chars)), dtype=np.bool)
for i, sequence in enumerate(sequences):for t, char in enumerate(sequence):X[i, t, char_to_index[char]] = 1y[i, char_to_index[next_chars[i]]] = 1# 构建LSTM模型
model = tf.keras.Sequential([tf.keras.layers.LSTM(128, input_shape=(max_sequence_length, len(chars))),tf.keras.layers.Dense(len(chars), activation='softmax')
])# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy')# 训练模型
model.fit(X, y, epochs=100)# 生成文本
seed_text = "这是一个示例文本。LSTM将学会预测下一个字符。"
generated_text = seed_text
for i in range(100):x = np.zeros((1, max_sequence_length, len(chars)))for t, char in enumerate(generated_text[-max_sequence_length:]):x[0, t, char_to_index[char]] = 1predicted_char = index_to_char[np.argmax(model.predict(x, verbose=0)]generated_text += predicted_char

代码中实现的是构建了一个LSTM模型,用于文本生成。模型学会了根据前面的文本生成后续文本,展示了LSTM如何捕捉文本中的序列信息。

自注意力模型

Transformer是一种能够理解文本和序列数据的神经网络模型。它的独特之处在于使用了自注意力机制,这意味着它能够同时关注输入数据中的不同部分,而不像传统的循环神经网络(RNN)或卷积神经网络(CNN)那样依赖于固定窗口大小或序列顺序。

Transformer的核心思想是将输入数据分为不同的“词嵌入”(word embeddings),然后使用自注意力机制来决定这些词嵌入之间的关联程度。这种方式使得模型可以处理长文本并捕捉到不同单词之间的复杂关系。

基本原理

自注意力机制

自注意力机制是Transformer的核心。它的思想是计算输入序列中每个位置对其他位置的重要性。这个重要性是通过计算一个权重值的方式来实现的,而这个权重值是根据输入的相似性来决定的。重要的是,这种计算是基于输入数据本身完成的,因此不受序列长度的限制。

具体步骤

1、嵌入层(Embedding Layer):将输入的文本序列转化为向量形式,每个词对应一个向量。这些向量被训练成具有语义信息的表示。

2、自注意力计算:对于每个词,计算它与所有其他词的相似性得分,然后将这些分数作为权重来加权其他词的嵌入向量。这个过程允许模型更关注与当前词相关的词。

3、多头自注意力:Transformer可以通过多个自注意力头来捕捉不同层次的关系,每个头都会生成一组权重,最后合并它们。

4、残差连接与层归一化:将多头自注意力的输出与输入相加,并应用层归一化,以防止梯度消失或爆炸。

5、前馈神经网络(Feed-Forward Network):对每个位置的向量进行非线性变换,以增强模型的表示能力。

6、编码器和解码器:在机器翻译等任务中,Transformer通常由编码器和解码器组成,它们分别用于处理输入和生成输出。

一个案例

首先,假设我们有一个文本分类任务,需要将文本句子分为正面和负面情感。

代码中,包括创建Transformer模型、输入数据和运行模型的步骤:

 
import torch
import torch.nn as nn# 创建一个简化的Transformer模型类
class TransformerModel(nn.Module):def __init__(self, d_model, nhead, num_encoder_layers):super(TransformerModel, self).__init__()self.transformer = nn.Transformer(d_model, nhead, num_encoder_layers)def forward(self, src, tgt):output = self.transformer(src, tgt)return output# 创建示例数据
# 假设我们有一个输入序列(src)和一个目标序列(tgt)
# 这里我们使用随机生成的数据,实际应用中应该替换为真实数据
src = torch.rand((10, 3, 512))  # 输入序列,形状:(sequence_length, batch_size, embedding_dim)
tgt = torch.rand((20, 3, 512))  # 目标序列,形状:(sequence_length, batch_size, embedding_dim)# 初始化模型
model = TransformerModel(512, 8, 6)# 运行模型
output = model(src, tgt)
print(output.shape)

在上述代码中:

1、我们创建了一个简化的Transformer模型(TransformerModel),它接受输入序列(src)和目标序列(tgt)。

2、我们使用torch.rand函数生成了随机的示例数据,其中src代表输入序列,tgt代表目标序列。这些数据应该由任务提供,实际应用中会更有意义。

3、我们初始化了模型并将输入数据传递给它,最后打印了输出的形状。

要注意的是,这个示例的数据和任务仅用于演示Transformer模型的使用方式。在实际情况下,需要准备适当的数据和任务设置来训练和使用Transformer模型。

生成对抗网络

生成对抗网络核心思想是模拟人类创造事物的方式。

GANs由两个主要部分组成:生成器(Generator)和判别器(Discriminator)。这两个部分之间进行博弈,使生成器逐渐学会创建逼真的数据,而判别器则逐渐变得更擅长区分真假数据。

基本原理

1、生成器(Generator):生成器的任务是接收一个随机噪声向量,然后将其转化为逼真的数据,例如图像。生成器是一个神经网络,通过不断调整其参数,使其生成的数据与真实数据尽可能相似。

2、判别器(Discriminator):判别器的任务是区分生成器生成的数据和真实数据。判别器也是一个神经网络,它会对输入的数据进行评估,输出一个0到1之间的概率值,表示数据的真实程度。

3、对抗训练:生成器和判别器交替进行训练。生成器努力生成更逼真的数据,而判别器努力变得更善于区分真伪。这种博弈过程推动了生成器不断提高生成的数据质量。

1、生成器的损失函数:生成器的目标是最小化,其中是判别器对生成器生成数据的评价。

2、判别器的损失函数:判别器的目标是最小化,其中是判别器对真实数据的评价,是对生成器生成数据的评价。

一个案例

我们以图像生成为例,使用Python和TensorFlow库来演示一个简单的GANs模型。

import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten, Reshape
from tensorflow.keras.models import Sequential# 创建生成器和判别器网络
def build_generator():model = Sequential()model.add(Dense(128, input_dim=100, activation='relu'))model.add(Dense(784, activation='sigmoid'))model.add(Reshape((28, 28, 1)))return modeldef build_discriminator():model = Sequential()model.add(Flatten(input_shape=(28, 28, 1)))model.add(Dense(128, activation='relu'))model.add(Dense(1, activation='sigmoid'))return model# 定义损失函数和优化器,并编译生成器和判别器
generator = build_generator()
discriminator = build_discriminator()discriminator.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
discriminator.trainable = Falsegan_input = tf.keras.Input(shape=(100,))
x = generator(gan_input)
gan_output = discriminator(x)gan = tf.keras.Model(gan_input, gan_output)
gan.compile(loss='binary_crossentropy', optimizer='adam')# 训练GANs模型
for epoch in range(epochs):for _ in range(batch_size):noise = np.random.normal(0, 1, [batch_size, 100])generated_images = generator.predict(noise)image_batch = x_train[np.random.randint(0, x_train.shape[0], size=batch_size)]discriminator.trainable = Trued_loss_real = discriminator.train_on_batch(image_batch, np.ones((batch_size, 1)))d_loss_fake = discriminator.train_on_batch(generated_images, np.zeros((batch_size, 1)))d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)noise = np.random.normal(0, 1, [batch_size, 100])discriminator.trainable = Falseg_loss = gan.train_on_batch(noise, np.ones((batch_size, 1)))# 生成并可视化手写数字图像
num_samples = 16
noise = np.random.normal(0, 1, [num_samples, 100])
generated_images = generator.predict(noise)for i in range(num_samples):plt.subplot(4, 4, i + 1)plt.imshow(generated_images[i, :, :, 0] * 0.5 + 0.5, cmap='gray')plt.axis('off')plt.show()

代码展示了一个简单的GANs模型,用于生成手写数字图像。

训练之后,生成器将生成逼真的手写数字图像,判别器将变得更难以区分真假图像。

生成对抗络是用于各种创意领域。它基于生成器和判别器的博弈,通过不断优化生成器来创造逼真的数据。

et/m0_61249789/article/details/139039434

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网上蛋糕售卖店管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,店员管理,用户管理,商品管理,基础数据管理 前台账户功能包括:系统首页,个人中心,公告信息,商品…

2024医美如何做抖音医美抖音号,本地团购、短视频直播双ip爆品引流,实操落地课

课程下载:https://download.csdn.net/download/m0_66047725/89307619 更多资源下载:关注我。 课程内容: 01-0-序.mp4 02-01-账号定位.mp4 03-02-误区.mp4 04-03-五件套.mp4 05-04-文案怎么来.mp4 06-05-对标怎么弄.mp4 07-06-人设怎…

Go实现阻塞读且并发安全的map

GO里面MAP如何实现key不存在 get操作等待 直到key存在或者超时,保证并发安全,且需要实现以下接口: type sp interface {Out(key string, val interface{}) //存入key /val,如果该key读取的goroutine挂起,则唤醒。此方…

进程与线程(四)

进程与线程(四) 基于System V IPC对象的进程间通信机制SystemV IPC引入查看Linux系统中IPC工具的方式查看所有IPC工具命令:ipcs 查看指定的IPC工具key值获取方法:ftok()函数 消息队列消息队列的特征:消息队列的操作打开…

处理多对一的映射关系

1、级联属性赋值 Emp实体类中设置Dept 属性并生成get、set方法,生成toString方法,但是构造方法不必包含此属性 在EmpMapper.xml文件中: <resultMap id="empAndDeptResultMapOne" type="Emp"><id property="eid" column="eid…

Python知识点5---字符串的使用

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python的字符串在使用上和其他语言的差别不大&#xff0c;常规操作都…

AndroidStudio使用高德地图API获取手机定位

一、高德地图API申请 首先去高德注册开发者账号 下面这两个选项&#xff0c;也是我们项目成功的关键 1.1怎么获取SHA1指纹密码 ①使用AS自带的签名文件 你的用户文件下面会有一个.android文件夹,进入文件夹,在这个路径下打开cmd 如果.android下面没有签名文件参考创建文章 …

挂载SMB和NFS共享目录

挂载SMB共享目录//192.168.3.191/OMV&#xff1a; ubuntu需要安装cifs工具&#xff1a; sudo apt install cifs-utils sudo mount.cifs //192.168.3.191/OMV /mnt -o usersamba,passsamba “samba”用户需要是一个samba用户&#xff0c;并且有访问OMV目录的权限。 挂载NFS共…

fastjson TypeReference 泛型类型(详解)

系列文章目录 附属文件一&#xff1a;fastjson 泛型转换问题&#xff08;详解&#xff09; 文章目录 系列文章目录一、简介二、构造方法1. 无参构造方法2. 有参构造方法 一、简介 com.alibaba.fastjson.TypeReference 即类型引用&#xff0c;用于指定我们使用 com.alibaba.fa…

Win10安装TensorRT

目录 什么是TensorRT 下载TensorRT 安装TensorRT 拷贝文件 安装whl文件 验证是否安装成功 什么是TensorRT TensorRT是由Nvidia推出的C语言开发的高性能神经网络推理库&#xff0c;是一个用于生成部署的优化器和运行时引擎。和cudnn类似&#xff0c;但它不支持训练&#xff…

开源与闭源 AI 模型:发展路径的比较与前瞻

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Git系列:rev-parse 使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

springboot 项目集成 knife4j

官方版本推荐 版本依赖 spring boot 2.3.12.RELEASE 和 knife4j 2.0.9 引入依赖 完整的pom.xml文件 <!-- https://mvnrepository.com/artifact/com.github.xiaoymin/knife4j-spring-boot-starter --> <dependency><groupId>com.github.xiaoymin</groupI…

OSEK错误处理及跟踪调试

1 前言 如表1所示&#xff0c;OSEK提供了一些特殊的钩子例程&#xff08;Hook routines&#xff09;&#xff0c;应用层可以在钩子函数中自定义操作&#xff0c;以参与到操作系统的内部处理中。 表1 钩子函数类型 钩子函数例程功能用途ErrorHook用于错误处理StartupHook在系统启…

Asp.Net Core 实现分片下载的最简单方式

技术群里的朋友遇到了这个问题&#xff0c;起初的原因是他对文件增加了一个属性配置 fileResult.EnableRangeProcessing true;这个属性我从未遇到过&#xff0c;然后&#xff0c;去F1查看这个属性的描述信息也依然少的可怜&#xff0c;只有简单的描述为(获取或设置为 启用范围…

Golang | Leetcode Golang题解之第125题验证回文串

题目&#xff1a; 题解&#xff1a; func isPalindrome(s string) bool {s strings.ToLower(s)left, right : 0, len(s) - 1for left < right {for left < right && !isalnum(s[left]) {left}for left < right && !isalnum(s[right]) {right--}if l…

GIS Java 生成四至图

目录 前言 操作步骤&#xff1a; 1&#xff0c;求出多边形的四至点 2&#xff0c;下载地图 3&#xff0c;绘制多边形 前言 对于地图上的一个多边形地块&#xff0c;其四至图就是能够覆盖这个多边形的最小矩形&#xff0c;也就是求出这个多边形的最东点&#xff0c;最西点&…

Java方法存档。组件容器

setIcon(new ImageIcon("banana.jpg")); javax.swing.ImageIcon.ImageIcon&#xff08;字符串文件名&#xff09; ConstructorProperties&#xff08;value{“描述”}&#xff09; 从指定的文件创建 ImageIcon。将使用 MediaTracker 预加载图像以监控图像的加载状…

关于GPT-4o的使用感受和评价

如何评价GPT-4o? 简介&#xff1a; 最近&#xff0c;GPT-4o横空出世。GPT-4o的发布无疑是人工智能领域的一次重大飞跃&#xff0c;它不仅仅是一个技术产品的迭代&#xff0c;更是人机交互理念的一次革新。作为OpenAI倾力打造的最新旗舰模型&#xff0c;GPT-4o在前代产品的基础…

Vue.js2+Cesium1.103.0 十六、多模型轨迹运动

Vue.js2Cesium1.103.0 十六、多模型轨迹运动 Demo <template><div id"cesium-container" style"width: 100%; height: 100%;"><ul class"ul"><li v-for"(item, index) of deviceInfo" :key"index" cl…