深入了解前馈网络、CNN、RNN 和 Hugging Face 的 Transformer 技术!
一、说明
本篇在此对自然语言模型做一个简短总结,从CNN\RNN\变形金刚,和抱脸的变形金刚库说起。
二、基本前馈神经网络:
让我们分解一个基本的前馈神经网络,也称为多层感知器(MLP)。此代码示例将:
- 定义神经网络的架构。
- 初始化权重和偏差。
- 使用 sigmoid 激活函数实现前向传播。
- 使用均方误差损失函数实现训练的反向传播。
- 演示在简单数据集上的训练。
import numpy as npclass NeuralNetwork:def __init__(self, input_size, hidden_size, output_size):# Initialize weights and biases with random valuesself.weights1 = np.random.randn(input_size, hidden_size)self.weights2 = np.random.randn(hidden_size, output_size)self.bias1 = np.random.randn(1, hidden_size)self.bias2 = np.random.randn(1, output_size)def sigmoid(self, x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(self, x):return x * (1 - x)def forward(self, X):self.hidden = self.sigmoid(np.dot(X, self.weights1) + self.bias1)output = self.sigmoid(np.dot(self.hidden, self.weights2) + self.bias2)return outputdef train(self, X, y, epochs, learning_rate):for epoch in range(epochs):# Forward propagationoutput = self.forward(X)# Compute errorerror = y - output# Backward propagationd_output = error * self.sigmoid_derivative(output)error_hidden = d_output.dot(self.weights2.T)d_hidden = error_hidden * self.sigmoid_derivative(self.hidden)# Update weights and biasesself.weights2 += self.hidden.T.dot(d_output) * learning_rateself.bias2 += np.sum(d_output, axis=0, keepdims=True) * learning_rateself.weights1 += X.T.dot(d_hidden) * learning_rateself.bias1 += np.sum(d_hidden, axis=0, keepdims=True) * learning_rate# Print the error at every 1000 epochsif epoch % 1000 == 0:print(f"Epoch {epoch}, Error: {np.mean(np.abs(error))}")# Sample data for XOR problem
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])# Create neural network instance and train
nn = NeuralNetwork(input_size=2, hidden_size=4, output_size=1)
nn.train(X, y, epochs=10000, learning_rate=0.1)# Test the neural network
print("Predictions after training:")
for data in X:print(f"{data} => {nn.forward(data)}")
在这个例子中,我们使用神经网络来解决异或问题,这是一个单层感知器无法解决的经典问题。
这种前馈神经网络只有一个隐藏层,这使得它能够学习非线性关系。调整隐藏层大小、学习率和周期数等参数会影响神经网络的性能和准确性。
三、卷积神经网络 (CNN)
CNN 专为图像处理而设计,包括称为卷积层的层,这些层对输入数据应用卷积运算,强调局部特征。
3.1 CNN的基本结构:
以下是使用 TensorFlow 和 Keras 库的基本卷积神经网络 (CNN) 的更全面实现。此示例将:
- 加载 MNIST 数据集,这是一个用于手写数字识别的常用数据集。
- 对数据进行预处理。
- 定义基本的 CNN 架构。
- 使用优化器、损失函数和度量编译模型。
- 在 MNIST 数据集上训练 CNN。
- 评估经过训练的 CNN 在测试数据上的准确性。
3.2 相关代码实现
# Import necessary libraries
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical# Load and preprocess the dataset
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)# Define the CNN architecture
model = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])# Compile the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# Train the model
model.fit(train_images, train_labels, epochs=5, batch_size=64)# Evaluate the model's accuracy on the test data
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {test_acc}')
在此示例中,基本 CNN 有三个卷积层,后跟最大池化层。在卷积层之后,我们将输出展平,并将其传递到两个密集(全连接)层。
最后的密集层有 10 个神经元,每个神经元代表一个从 0 到 9 的数字,具有 softmax 激活函数来产生类概率。
这是MNIST数据集的一个简单而有效的CNN。您可以通过添加更多层、使用正则化 dropout 等技术或采用高级优化技术来进一步改进网络。
四、循环神经网络 (RNN)
RNN 旨在识别数据序列中的模式,例如文本或时间序列。它们保留对先前输入的记忆。
4.1 基本RNN结构:
让我们使用 TensorFlow 和 Keras 创建一个基本的递归神经网络 (RNN)。此示例将演示:
- 加载序列数据集(我们将使用 IMDB 情感分析数据集)。
- 预处理数据。
- 定义一个简单的 RNN 架构。
- 使用优化器、损失函数和度量编译模型。
- 在数据集上训练 RNN。
- 评估经过训练的 RNN 在测试数据上的准确性。
4.2 相关代码实现
# Import necessary libraries
import tensorflow as tf
from tensorflow.keras.datasets import imdb
from tensorflow.keras.preprocessing.sequence import pad_sequences# Constants
VOCAB_SIZE = 10000
MAX_LEN = 500
EMBEDDING_DIM = 32# Load and preprocess the dataset
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=VOCAB_SIZE)# Pad sequences to the same length
train_data = pad_sequences(train_data, maxlen=MAX_LEN)
test_data = pad_sequences(test_data, maxlen=MAX_LEN)# Define the RNN architecture
model = tf.keras.Sequential([tf.keras.layers.Embedding(VOCAB_SIZE, EMBEDDING_DIM, input_length=MAX_LEN),tf.keras.layers.SimpleRNN(32, return_sequences=True),tf.keras.layers.SimpleRNN(32),tf.keras.layers.Dense(1, activation='sigmoid')
])# Compile the model
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])# Train the model
model.fit(train_data, train_labels, epochs=10, batch_size=128, validation_split=0.2)# Evaluate the model's accuracy on the test data
test_loss, test_acc = model.evaluate(test_data, test_labels)
print(f'Test accuracy: {test_acc}')
在此示例中,我们首先使用嵌入层将整数序列转换为固定大小的密集向量。然后,两个 RNN 层处理序列。
具有 sigmoid 激活函数的最后一个密集层输出一个概率,指示评论的情绪(0 表示负面,1 表示正面)。
值得注意的是,在实际应用中,您可能需要考虑使用更高级的递归层,如 LSTM 或 GRU,因为它们可以比基本 RNN 更好地捕获远程依赖关系。
此外,可以根据特定的应用程序和数据集对超参数(如 、 和)进行微调,以获得最佳结果。
VOCAB_SIZE
MAX_LEN
EMBEDDING_DIM
五、变形金刚
Transformer 最初是为自然语言处理任务而设计的,具有自注意力机制,允许它们权衡输入不同部分的重要性。
5.1 Transformer 片段(使用 Hugging Face 的 Transformers 库):
Hugging Face 的 Transformers 库使使用 BERT、GPT-2 等 Transformer 架构变得非常容易。让我们创建一个基本示例:
- 加载用于文本分类的预训练 BERT 模型。
- 标记化一些输入句子。
- 通过 BERT 模型传递标记化输入。
- 输出预测的类概率。
5.2 相关代码实现
在本演示中,让我们使用 BERT 模型进行序列分类:
# Installation (if you haven't done it yet)
#!pip install transformers# Import required libraries
from transformers import BertTokenizer, BertForSequenceClassification
import torch# Load pretrained model and tokenizer
model_name = 'bert-base-uncased'
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2) # For binary classification
tokenizer = BertTokenizer.from_pretrained(model_name)# Tokenize input data
input_texts = ["I love using transformers!", "This library is difficult to understand."]
inputs = tokenizer(input_texts, return_tensors='pt', padding=True, truncation=True, max_length=512)# Forward pass: get model predictions
with torch.no_grad():outputs = model(**inputs)logits = outputs.logitsprobabilities = torch.nn.functional.softmax(logits, dim=-1)# Display predicted class probabilities
print(probabilities)
此脚本初始化用于二进制序列分类的 BERT 模型,对输入句子进行标记,然后根据模型的对数进行预测。
最终输出 , 包含输入句子的预测类概率。
probabilities
请注意,此模型已针对二元分类(使用 )进行了初始化,因此它最适合情绪分析等任务。
num_labels=2
对于多类分类或其他任务,您可以调整并可能选择不同的预训练模型,或者在特定数据集上微调模型。
num_labels
六、结论
深度学习的世界是广阔的,正如所展示的那样,其算法可能会根据其应用领域变得复杂。然而,多亏了 TensorFlow 和 Hugging Face 等高级库,使用这些算法变得越来越容易。
旅程
相关文章:

深入了解前馈网络、CNN、RNN 和 Hugging Face 的 Transformer 技术!
一、说明 本篇在此对自然语言模型做一个简短总结,从CNN\RNN\变形金刚,和抱脸的变形金刚库说起。 二、基本前馈神经网络: 让我们分解一个基本的前馈神经网络,也称为多层感知器(MLP)。此代码示例将࿱…...
Flink Table API 读写MySQL
Flink Table API 读写 MySQL import org.apache.flink.connector.jdbc.table.JdbcConnectorOptions; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.DataTypes; import org.apache.flink.table.api.Envi…...
Nginx 开源版安装
下载 tar.gz安装包,上传。 解压 [rootlocalhost ~]# tar zxvf nginx-1.21.6.tar.gz nginx-1.21.6/ nginx-1.21.6/auto/ nginx-1.21.6/conf/ nginx-1.21.6/contrib/ nginx-1.21.6/src/ ... ...安装gcc [rootlocalhost nginx-1.21.6]# yum install -y gcc 已加载插件…...

『亚马逊云科技产品测评』活动征文|低成本搭建物联网服务器thingsboard
授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 0. 环境 - ubuntu22(注意4G内存勉强够,部署完…...

【Pytorch】Visualization of Feature Maps(3)
学习参考来自: Image Style Transform–关于图像风格迁移的介绍github:https://github.com/wmn7/ML_Practice/tree/master/2019_06_03 文章目录 风格迁移 风格迁移 风格迁移出处: 《A Neural Algorithm of Artistic Style》(ar…...

人工智能对我们的生活影响
目录 前言 一、人工智能的领域 二、人工智能的应用 三、对人工智能的看法 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDNǴ…...
Mysql存储引擎分类
Mysql存储引擎分类: 在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。 InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有…...

基于Python+TensorFlow+Django的交通标志识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 随着交通网络的不断扩展和智能交通系统的发展,交通标志的自动识别变得愈发重要。本项目旨在利用Python编…...

【Java 进阶篇】Jedis:让Java与Redis轻松对话的利器
在现代软件开发中,缓存系统是提高系统性能的常见手段之一,而Redis作为一个高性能的缓存数据库,被广泛应用于各类系统。如果你是Java开发者,那么使用Jedis库可以让你轻松地与Redis进行交互。本文将带你深入了解Jedis的快速入门&…...

【数据分享】我国12.5米分辨率的DEM地形数据(免费获取/地理坐标系)
DEM地形数据是我们在各种研究和设计中经常使用的数据!之前我们分享过500米分辨率的DEM地形数据、90米分辨率的DEM地形数据、30米分辨率的DEM地形数据(均可查看之前的文章获悉详情)。 本次我们为大家带来的是分辨率为12.5m的DEM地形数据&#…...

C++设计模式之策略模式
策略模式 介绍示例示例测试运行结果应用场景优点总结 介绍 策略模式是一种行为设计模式。在策略模式中,可以创建一些独立的类来封装不同的算法,每一个类封装一个具体的算法,每一个封装算法的类叫做策略(Strategy),为了保证这些策…...
spring-webflux的一些概念的理解
Spring5的webflux可以支持高吞吐量,使用相同的资源可以处理更加多的请求,它将会成为未来技术的趋势,但是相对于学习其他的框架相比,它的学习曲线很高,综合了很多现有的技术,即使按照教程学习能编写代码&…...

OpenCV快速入门:特征点检测与匹配
文章目录 前言一、角点检测1.1 角点特征1.1.1 角点特征概念1.1.2 角点的特点1.1.3 关键点绘制代码实现1.1.4 函数解析 1.2 Harris角点检测1.2.1 Harris角点检测原理1.2.2 Harris角点检测公式1.2.3 代码实现1.2.4 函数解析 1.3 Shi-Tomasi角点检测1.3.1 Shi-Tomasi角点检测原理1…...

旋转的数组
分享今天看到的一个题目,不同思路解法 题目 思路1:时间复杂度0(N*k) void rotate(int *a,int N,int k)//N为数组元素个数 { while(k--) { int tema[N-1]; for(int rightN-2;right>0;right--) { a[right1]a[right]; } a[0]tem; …...
Hive VS Spark
spark是一个计算引擎,hive是一个存储框架。他们之间的关系就像发动机组与加油站之间的关系。 类似于spark的计算引擎还有很多,像mapreduce,flink等等。 类似于hive的存储框架也是数不胜数,比如pig。 最底层的存储往往都是使用h…...
SAST静态分析工具所支持的规则
综合国内外SAST工具支持的规则,这些规则包括了国际标准、国内标准、行业标准等,这里我罗列了一下,这些规则对应的标准集合。 评估一款SAST工具时,支持规则集的多少,且每个规则集是否为全集,或者接近全集&am…...
torch 的数据加载 Datasets DataLoaders
点赞收藏关注! 如需要转载,请注明出处! torch的模型加载有两种方式: Datasets & DataLoaders torch本身可以提供两数据加载函数: torch.utils.data.DataLoader()和torch.utils.data.Datase…...
【Promise】某个异步方法执行结束后 在执行下面方法
使用Promise ,当 layer.msg(查询成功) 这个方法执行结束后 ,下面代码才会执行 let thas this async function showMessage() {await new Promise(resolve > layer.msg(查询成功, resolve));// 这里的代码将在 layer.msg 执行结束后执行thas.isGuaran…...

任意文件下载漏洞(CVE-2021-44983)
简介 CVE-2021-44983是Taocms内容管理系统中的一个安全漏洞,可以追溯到版本3.0.1。该漏洞主要源于在登录后台后,文件管理栏存在任意文件下载漏洞。简言之,这个漏洞可能让攻击者通过特定的请求下载系统中的任意文件,包括但不限于敏…...
C++(20):通过source_location实现日志函数
C++20中引入了std::source_location,用来描述函数调用的上下文信息。 其主要的成员函数如下: line():获取行号。column():获取列号。file_name():获取文件名。function_name():获取函数域名。#include <iostream> #include <string_view> #include <sour…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...