机器学习系列----介绍前馈神经网络和卷积神经网络 (CNN)
前言
在深度学习领域,神经网络是一种模拟人脑神经元结构和功能的数学模型。它通过大量的层次结构和参数调整来实现模式识别、分类、回归等任务。常见的神经网络结构有前馈神经网络(Feedforward Neural Networks,简称 FNN)和卷积神经网络(Convolutional Neural Networks,简称 CNN)。这两种网络模型在图像处理、语音识别等多个领域取得了巨大的成功。
本篇博客将详细介绍前馈神经网络和卷积神经网络的基本原理,并通过代码示例进一步帮助理解。
一、前馈神经网络(Feedforward Neural Networks)
1.1 前馈神经网络概述
前馈神经网络(FNN)是一种最基本的神经网络结构,信息在网络中按单向流动,没有任何循环或反馈连接。它由输入层、若干隐藏层和输出层组成。
输入层:接收原始数据,传递给网络中的隐藏层。
隐藏层:通过神经元和激活函数处理数据,捕捉数据中的特征。
输出层:输出网络最终的预测结果。
FNN 是最简单的神经网络结构,通常用于分类和回归问题。
1.2 FNN的工作原理
输入数据通过输入层传入网络。
每一层的神经元接收上一层的输出并进行加权求和。
加权和通过激活函数进行非线性变换,生成该层的输出。
最后一层输出结果,即模型的预测值。
1.3 代码示例:用 TensorFlow 构建前馈神经网络
下面是一个简单的前馈神经网络实现,用于分类任务(例如 MNIST 手写数字识别):
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理
x_train = x_train.reshape((x_train.shape[0], 28, 28, 1)).astype('float32') / 255
x_test = x_test.reshape((x_test.shape[0], 28, 28, 1)).astype('float32') / 255
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)# 创建前馈神经网络模型
model = models.Sequential([layers.Flatten(input_shape=(28, 28, 1)), # 将28x28的图片展开成一维向量layers.Dense(128, activation='relu'), # 隐藏层,128个神经元layers.Dropout(0.2), # Dropout层,防止过拟合layers.Dense(10, activation='softmax') # 输出层,10个神经元,代表10类
])# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=64)# 测试模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")
1.4 解释
- Flatten:将28x28的输入图像展平为一个784维的向量,输入到神经网络中。
- Dense:创建一个全连接层,包含128个神经元。激活函数使用
ReLU,使得网络能够学习非线性关系。 - Dropout:防止过拟合,训练过程中随机丢弃一些神经元。
- Softmax:输出层的激活函数,适用于多分类问题,将网络的输出转化为概率分布。
二、卷积神经网络(Convolutional Neural Networks)
2.1 卷积神经网络概述
卷积神经网络(CNN)是一种专门用于处理具有网格结构的数据的深度学习算法,最常用于图像处理任务。CNN 通过卷积层、池化层等操作提取图像中的局部特征,并最终进行全局分类或回归。
2.2 CNN的工作原理
- 卷积操作:卷积层通过多个卷积核(filter)对输入图像进行卷积操作,提取局部特征。卷积操作的结果是一个特征图(feature map)。
- 池化操作:池化层用于对特征图进行下采样,通常使用最大池化(Max Pooling)或者平均池化(Average Pooling)。
- 全连接层:池化后得到的特征图被展平成一维向量,然后传入全连接层,进行进一步处理,输出最终预测结果。
2.3 代码示例:用 TensorFlow 构建卷积神经网络
以下是一个卷积神经网络的实现,用于处理 MNIST 手写数字识别任务:
- 卷积层(Convolutional Layer):通过卷积核对输入图像进行卷积操作,从而提取局部特征。
- 池化层(Pooling Layer):对卷积层输出进行下采样,减小图像的尺寸,并减少计算量。
- 全连接层(Fully Connected Layer):连接卷积层和输出层,对特征进行整合并输出最终的预测结果。
- 卷积操作:卷积层通过多个卷积核(filter)对输入图像进行卷积操作,提取局部特征。卷积操作的结果是一个特征图(feature map)。
- 池化操作:池化层用于对特征图进行下采样,通常使用最大池化(Max Pooling)或者平均池化(Average Pooling)。
-
全连接层:池化后得到的特征图被展平成一维向量,然后传入全连接层,进行进一步处理,输出最终预测结果。
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理
x_train = x_train.reshape((x_train.shape[0], 28, 28, 1)).astype('float32') / 255
x_test = x_test.reshape((x_test.shape[0], 28, 28, 1)).astype('float32') / 255
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)# 创建前馈神经网络模型
model = models.Sequential([layers.Flatten(input_shape=(28, 28, 1)), # 将28x28的图片展开成一维向量layers.Dense(128, activation='relu'), # 隐藏层,128个神经元layers.Dropout(0.2), # Dropout层,防止过拟合layers.Dense(10, activation='softmax') # 输出层,10个神经元,代表10类
])# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=64)# 测试模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")
2.4 解释
- Conv2D:卷积层,通过32个3x3的卷积核对输入图像进行卷积,激活函数采用
ReLU。 - MaxPooling2D:池化层,采用2x2的最大池化操作,降低特征图的维度。
- Flatten:将卷积层输出的特征图展平成一维向量,方便输入到全连接层。
- Dense:全连接层,最后一层的激活函数采用
softmax,进行多分类。
三、拓展知识
卷积神经网络(CNN)是一种深度学习模型,它在图像和视频分析中非常有效。以下是一些关于卷积神经网络的拓展知识:
局部连接和权值共享:CNN通过局部连接和权值共享减少了参数数量,这使得网络更易于优化,并降低了过拟合的风险
感受野:卷积层中的每个神经元只与输入数据的一个局部区域相连接,这个局部区域称为感受野。这有助于捕捉图像的局部特征
卷积层的变体:
逐通道卷积(Depthwise Convolution):每个输入通道应用一个卷积核,适用于单独通道的特征提取
逐点卷积(Pointwise Convolution):在逐通道卷积的基础上,将不同通道的特征图进行融合
深度可分离卷积(Depthwise Separable Convolution):结合了逐通道卷积和逐点卷积,提高了效率
组卷积(Group Convolution):将输入通道分组,每组应用不同的卷积核,减少了参数量
空间可分离卷积(Spatially Separable Convolution):在不同空间维度独立应用卷积核,进一步减少计算量
空洞卷积(Dilated Convolution):通过增加卷积核中的空间间隔来捕捉更宽广的上下文信息
转置卷积(Transposed Convolution):常用于图像生成任务,可以增大特征图的尺寸
稀疏卷积(Sparse Convolution):关注在大量零值存在时的高效计算
多维卷积(Multidimensional Convolution):扩展了卷积操作到更高维度的数据
经典CNN模型:
LeNet-5:由Yann Lecun于1998年提出,是第一个成功的CNN模型,用于手写数字识别
AlexNet:在2012年ImageNet竞赛中取得冠军,标志着深度学习的兴起
VGG-16:以其简单的网络结构和深度而闻名,广泛应用于图像识别任务
应用领域:CNN不仅用于图像分类,还广泛应用于视频分析、医学图像分割、自动驾驶、机器人视觉等领域
可解释性研究:随着深度学习模型在关键领域的应用,模型的可解释性变得越来越重要。研究者们正在探索如何使CNN的决策过程更加透明和可理解
研究进展:CNN的研究仍在不断发展,包括改进网络架构、提高计算效率、增强模型的泛化能力等方面
1. 图像分类
以经典的VGG-16模型为例,使用Keras库进行图像分类:
from keras.applications import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
from keras.models import Model
import numpy as np# 加载预训练的VGG16模型,不包括顶层
base_model = VGG16(weights='imagenet', include_top=False)# 让我们为VGG16添加顶部层
x = base_model.output
x = layers.Flatten()(x) # 展平特征图
x = layers.Dense(4096, activation='relu')(x) # 新增全连接层
x = layers.Dense(4096, activation='relu')(x) # 新增全连接层
predictions = layers.Dense(1000, activation='softmax')(x) # 输出层,1000个单位对应ImageNet的类别数# 构建完整模型
model = Model(inputs=base_model.input, outputs=predictions)# 编译模型
model.compile(optimizer=optimizers.SGD(learning_rate=0.001, momentum=0.9), loss='categorical_crossentropy', metrics=['accuracy'])# 加载你的图片,预处理并预测
img_path = 'path_to_your_image.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)# 预测
predictions = model.predict(x)
2. 目标检测
使用预训练的SSD(Single Shot MultiBox Detector)模型进行目标检测:
from keras.applications import SSD300
from keras.applications.ssd import preprocess_input
from keras.preprocessing import image
import numpy as np# 加载预训练的SSD300模型
model = SSD300(weights='imagenet')# 加载你的图片,预处理
img_path = 'path_to_your_image.jpg'
img = image.load_img(img_path, target_size=(300, 300))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)# 预测
preds = model.predict(x)# 解析预测结果
# 这里需要自定义解析函数,根据模型的输出来获取检测到的目标类别、位置等信息
3. 图像分割
使用U-Net模型进行图像分割:
from keras.models import Model
from keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenate
from keras.optimizers import Adamdef conv_block(input_tensor, num_filters):x = Conv2D(num_filters, (3, 3), padding='same')(input_tensor)x = Activation('relu')(x)x = Conv2D(num_filters, (3, 3), padding='same')(x)x = Activation('relu')(x)return xdef encoder_block(input_tensor, num_filters):x = conv_block(input_tensor, num_filters)p = MaxPooling2D((2, 2))(x)return x, pdef decoder_block(input_tensor, concat_tensor, num_filters):x = UpSampling2D((2, 2))(input_tensor)x = concatenate([x, concat_tensor], axis=-1)x = conv_block(x, num_filters)return x# 定义输入
input_img = Input(shape=(256, 256, 3))# 编码器
c1, p1 = encoder_block(input_img, 32)
c2, p2 = encoder_block(p1, 64)
c3, p3 = encoder_block(p2, 128)
c4, p4 = encoder_block(p3, 256)# 桥接层
b = conv_block(p4, 512)# 解码器
d1 = decoder_block(b, c4, 256)
d2 = decoder_block(d1, c3, 128)
d3 = decoder_block(d2, c2, 64)
d4 = decoder_block(d3, c1, 32)# 输出层
output_img = Conv2D(1, (1, 1), activation='sigmoid')(d4)# 构建模型
model = Model(inputs=[input_img], outputs=[output_img])# 编译模型
model.compile(optimizer=Adam(lr=1e-4), loss='binary_crossentropy')# 训练模型
# model.fit(...)
这些代码示例提供了使用CNN进行不同任务的基础框架。在实际应用中,你可能需要根据具体任务调整网络结构、损失函数、优化器等。此外,对于大型数据集和复杂任务,还需要进行数据预处理、模型调优、超参数调整等步骤。
卷积神经网络(CNN)是深度学习领域中处理图像和其他高维数据的核心技术。它们通过模拟人类视觉系统的工作原理,能够自动并有效地从图像中学习到有用的特征表示。CNN的基础结构包括卷积层、激活函数、池化层和全连接层,这些层共同工作以提取图像的局部特征、引入非线性、降低特征维度并输出最终的分类或预测结果。随着研究的深入,CNN的架构不断演进,例如VGG、ResNet和U-Net等,它们在图像分类、目标检测、图像分割等任务中取得了显著成果。此外,CNN也被应用于视频处理、医学图像分析、风格迁移、生成对抗网络(GANs)和自编码器等更广泛的领域。尽管存在挑战,如对大量标注数据的依赖和模型解释性等问题,但CNN的发展势头不减,新的网络架构和优化技术不断涌现,推动了深度学习在各行各业的应用。随着计算能力的提升和算法的改进,CNN在处理复杂问题上的能力将进一步增强,为人工智能的发展贡献重要力量。
前馈(Feedforward)是神经网络中的一种数据传输方式,指的是信息在神经网络中从输入层经过各隐藏层向输出层单向传播,不存在反馈连接。在这种结构中,每一层的神经元仅与相邻层的神经元相连,且每个连接都有一个权重。前馈神经网络(Feedforward Neural Networks, FNN)是最基本的深度学习模型,它们可以用于各种机器学习任务,如分类、回归和模式识别。
前馈神经网络的特点包括:
单向传播:信息从输入层流向隐藏层,最后到达输出层,不存在回路。
权重共享:同一个层内的神经元之间不共享权重,但不同层之间的神经元通过权重连接。
激活函数:每个隐藏层通常包含一个激活函数,如ReLU、Sigmoid或Tanh,以引入非线性,使得网络能够学习和模拟更复杂的函数。
损失函数:网络通过损失函数来衡量预测值与真实值之间的差异,常见的损失函数包括均方误差(MSE)和交叉熵损失。
优化算法:通过反向传播算法(Backpropagation)和梯度下降(或其变体)来更新网络权重,以最小化损失函数。
层次结构:前馈神经网络通常具有多个隐藏层,深层网络能够学习更复杂的特征表示。
前馈神经网络的一个典型例子是多层感知器(Multilayer Perceptron, MLP),它是一个全连接的前馈神经网络。随着深度学习的发展,前馈神经网络已经衍生出多种更复杂的结构,如卷积神经网络(CNN)、循环神经网络(RNN)和变换器(Transformer)等,这些模型在处理不同类型的数据和任务时表现出了卓越的性能。
相关文章:
机器学习系列----介绍前馈神经网络和卷积神经网络 (CNN)
前言 在深度学习领域,神经网络是一种模拟人脑神经元结构和功能的数学模型。它通过大量的层次结构和参数调整来实现模式识别、分类、回归等任务。常见的神经网络结构有前馈神经网络(Feedforward Neural Networks,简称 FNN)和卷积神…...
vue.js组件和传值以及微信小程序组件和传值
微信小程序组件以及vue.js组件 一.微信小程序组件引用1.创建组件Component2.页面组件引用3.组件传值3.1 父视图传值到子组件 (父---->子)3.2 子组件传值给父组件 (子---->父)3.3 父组件方法传递到子组件 4. 界面之间的传值4.1 正向传值4.2 反向传值…...
c语言编程题(函数)
1编写函数将一个仅包含整数(可能为负)的字符串转换为对应的整数 方法一使用标准库函数 atoi atoi 函数是C语言标准库中的一个函数,用于将字符串转换为整数。 代码: #include <stdio.h> #include <stdlib.h> // 包含…...
华为eNSP:QinQ
一、什么是QinQ? QinQ是一种网络技术,全称为"Quantum Insertion",也被称为"Q-in-Q"、"Double Tagging"或"VLAN stacking"。它是一种在现有的VLAN(Virtual Local Area Network࿰…...
JAVA基础-多线程线程池
文章目录 1. 多线程1.1什么是多线程(1)并发和并行(2)进程和线程 1.2多线程的实现方式1.2.1 方式一:继承Thread类1.2.2 方式二:实现Runnable接口1.2.3方式三: 实现Callable接口 1.3 常见的成员方法1.3.1 设置…...
HarmonyOS 沉浸式状态实现的多种方式
1. HarmonyOS 沉浸式状态实现的多种方式 HarmonyOS 沉浸式状态实现的多种方式 1.1. 方法一 1.1.1. 实现讲解 (1)首先设置setWindowLayoutFullScreen(true)(设置全屏布局)。 布局将从屏幕最顶部开始到最底部结束,…...
Python3.11.9下载和安装
Python3.11.9下载和安装 1、下载 下载地址:https://www.python.org/downloads/windows/ 选择版本下载,例如:Python 3.11.9 - April 2, 2024 2、安装 双击exe安装 3、配置环境变量 pathD:\Program Files\python3.11.9...
简简单单的UDP
前言 上一篇了解了TCP的三次握手过程,目的、以及如何保证可靠性、序列号与ACK的作用,最后离开的时候四次挥手的内容,这还只是TCP内容中的冰山一角,是不是觉得TCP这个协议非常复杂,这一篇我们来了解下传输层另外一个协…...
减少 try...catch,定义全局统一异常处理器!
前言 软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc 架构中各层会出现大量的try {...} catch {...} finally {...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器&#x…...
多点支撑:滚珠导轨的均匀分布优势!
滚珠导轨的滚珠稳定性可以有效保持滚珠导轨的稳定运行,减少滚珠脱落的风险,确保设备的长期稳定性和可靠性。事实上,滚珠导轨的滚珠稳定性主要依赖于以下几个方面: 1、精密的制造工艺:滚珠导轨的导轨和滑块通常采用高精…...
电气火灾探测器在商场火灾隐患监测和火灾预防中的应用
徐悦 安科瑞电气股份有限公司 近年来,全国火灾事故频发,尤其是在大型商场等公共场所,火灾造成了巨大的人员伤亡和财产损失。以南京金盛百货中央门店火灾为例,该起事故暴露了商场在电气安全、消防管理方面的重大隐患,…...
速盾:如何有效防止服务器遭受攻击?
服务器攻击是网络安全中常见的问题,但我们可以采取一系列的措施来有效防止服务器的遭受攻击。以下是一些常见的防御措施: 更新和维护服务器软件:及时更新操作系统、应用程序以及安全补丁,以确保最新版本的软件没有已知的漏洞。同时…...
【今日更新】使用Python辅助处理WebGIS
Linux发行版本: Debian GNU/Linux 12 (bookworm)操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36Python版本: 3.11.2 1.使用Python处理MapServer配置文件Mapfile 创建、分析、修改和格式化的python库 MapServer Mapfiles。 Python 2和3 兼容 纯Python-无MapServer依…...
Linux 消息队列
在Linux中,线程间消息队列可以通过使用System V消息队列或POSIX消息队列来实现。 使用System V消息队列: System V消息队列是一种基于IPC(Inter-process Communication,进程间通信)的通信机制,可以用于进程…...
十大经典排序算法-冒泡算法详解介绍
1、十大经典排序算法 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要…...
delphi 编译多语言工程 error RC2104 : undefined keyword or key name:
Delphi 10.3中建立多语言工程,编译时出现错误:error RC2104 : undefined keyword or key name: 出现错误的的文件是.rc文件,出现错误的位置是 System_JSONConsts_SInvalidJavascriptQuote, L"Invalid JavaScript string quote character…...
[python] 如何debug python脚本中C++后端的core dump
文章目录 Debug过程Reference Debug过程 另外:对于core dump: gdb版本是>7,gdb从版本7开始支持对Python的debug。确保你的系统中安装了 GDB 调试器和对应版本的 Python 调试信息包(例如 python-dbg 或 python-debuginfo)。 #…...
Ecmascript(ES)标准
Ecmascript(ES)标准 ECMAScript(通常简称为 ES)是一种标准化的脚本语言,由 Ecma International 通过 ECMA-262 标准定义。ECMAScript 是 JavaScript 的规范版本,几乎所有的现代浏览器和许多服务器端环境&a…...
易泊车牌识别相机:4S 店的智能之选
在当今数字化时代,科技的进步不断为各个行业带来更高效、便捷的解决方案。对于 4S 店来说,易泊车牌识别相机的出现,无疑为其运营管理带来了全新的变革。 一、易泊车牌识别相机的强大功能 易泊车牌识别相机以其卓越的性能和精准的识别能力&…...
Webpack 深度解析与实战指南
文章目录 前言一、安装于基本配置安装Webpack 和 Webpack CLI创建基本配置文件 二、加载器常见的加载器配置加载器 三、插件(Plugins)常用的插件配置插件 四、性能优化缓存代码分割Tree Shaking压缩 五、开发服务器安装服务器配置服务器启动服务器生产环…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
