当前位置: 首页 > news >正文

深入了解前馈网络、CNN、RNN 和 Hugging Face 的 Transformer 技术!

   一、说明

        本篇在此对自然语言模型做一个简短总结,从CNN\RNN\变形金刚,和抱脸的变形金刚库说起。

二、基本前馈神经网络:

        让我们分解一个基本的前馈神经网络,也称为多层感知器(MLP)。此代码示例将:

  1. 定义神经网络的架构。
  2. 初始化权重和偏差。
  3. 使用 sigmoid 激活函数实现前向传播。
  4. 使用均方误差损失函数实现训练的反向传播。
  5. 演示在简单数据集上的训练。
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) 的更全面实现。此示例将:

  1. 加载 MNIST 数据集,这是一个用于手写数字识别的常用数据集。
  2. 对数据进行预处理。
  3. 定义基本的 CNN 架构。
  4. 使用优化器、损失函数和度量编译模型。
  5. 在 MNIST 数据集上训练 CNN。
  6. 评估经过训练的 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)。此示例将演示:

  1. 加载序列数据集(我们将使用 IMDB 情感分析数据集)。
  2. 预处理数据。
  3. 定义一个简单的 RNN 架构。
  4. 使用优化器、损失函数和度量编译模型。
  5. 在数据集上训练 RNN。
  6. 评估经过训练的 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_SIZEMAX_LENEMBEDDING_DIM

五、变形金刚

Transformer 最初是为自然语言处理任务而设计的,具有自注意力机制,允许它们权衡输入不同部分的重要性。

5.1 Transformer 片段(使用 Hugging Face 的 Transformers 库):

Hugging Face 的 Transformers 库使使用 BERT、GPT-2 等 Transformer 架构变得非常容易。让我们创建一个基本示例:

  1. 加载用于文本分类的预训练 BERT 模型。
  2. 标记化一些输入句子。
  3. 通过 BERT 模型传递标记化输入。
  4. 输出预测的类概率。

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)。此代码示例将&#xff1…...

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&#x1f4…...

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…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...