PyTorch深度学习框架

news2024/9/24 9:23:11

        最近放假在超星总部河北燕郊园区实习,本来是搞前后端开发岗位的,然后带我的副总老大哥比较关照我,了解我的情况后得知我大三选的方向是大数据,于是建议我学学python、Hadoop,Hadoop我看了一下内容比较多,而且我现在大二暑假不着急这么快学完,公司暂时也没这个项目可以给我学,于是我就先学了两天python,把基础python学完了。

        然后副总老大哥来问我学完了Python是吧,直接给我一个项目好好了解一下,然后我看了这个项目的文档,PyTorch??是啥??

这给我搞迷糊了,他跟我解释这是一个ai深度学习的框架语言,于是我又开始了新的学习,这里以这篇文章开始记录我对PyTorch的学习。

一、PyTorch是啥?

本人语言能力较差,也只是小白,所以这里直接用权威的百度百科简单介绍:

简单来说就是基于Python语言编写的深度学习框架,现如今学习人工智能就是学深度学习,而深度学习单纯用python来写要写巨海量的代码,我们这些小卡拉米根本没这个能力,所以就需要一个深度学习框架帮我们省去很多代码,就像前端后端都需要框架语言一样,下面是百度百科:

二、安装与配置

1、安装ANACONDA

ANACONDA是一个工具库,里面有很多我们后面学习需要的工具包,就像你的java后端maven里可以下载大量依赖包、pycharm可以下载大量依赖包一样,ANACONDA就是这么个玩意。

最新版下载官方地址(不能选版本):Anaconda | The Operating System for AI

(可选旧版本的下载地址):Anaconda Installers and Packages

(1)第一个最新版下载地址的下载步骤

下载步骤是:(当然这个版本不太稳定,但是没办法,我本人已经安装了最新版python......只好对应安装最新版anaconda)

(2)可选旧版本的下载步骤:

当然有的人用的是旧版本的Python,可能旧版本的Python就需要旧的的anaconda支持,所以你们需要根据自己的python版本来找对应的anaconda版本

查看python版本可以直接cmd,输入python

下面是一些对应关系的表:

Anaconda版本与Python版本对应关系_conda22.9.0是什么版本-CSDN博客

然后下载步骤:

也可以直接点这个网址:Index of /

然后选择你要的版本点击下载

(3)安装步骤:

......省略后面,一直next就行了

然后弹出这个,爽!当然我这是最新版的安装,就版本大差不差,基本就是你只要改一下默认安装路径,然后其他的就直接点【next】【skip】【finish】一直往下就ok了,全都默认就行

这里他还提醒我还有一个新版本可以更新,我现在只想用它,就懒得更新了,直接No,然后开始使用吧

最后,检查安装,点击桌面【开始】看看有没有Anaconda Prompt这个应用,点击只会正常弹出黑框,就大功告成

最后最后,进去应用里登陆一下就行,没账号的就先注册,这个Anaconda就先告一段落

2、(可选,非必选)安装英伟达NVIDIA

这个玩意吧就是加快机器深度学习效率的显卡,打游戏的屌丝们肯定不陌生,那么不安装也不影响深度学习,自己看着来吧,我是拯救者r8000,电脑自带NVIDIA,所以我这就懒得再做安装演示了

如何检查自己有没有NVIDIA驱动?

打开任务管理器——>性能——>GPU,能看到NVIDIA就ok

3、利用conda管理、切换Python、PyTorch版本

就跟我们前端的NVM一样,conda来自于Anaconda工具包,它的作用就是控制管理我们多个Python、PyTorch版本之间的切换。如果你不这样弄,你如果有一个项目需要用python 1.2,而你的是别的版本,那只能在本地环境中卸载原版本,再安装python 1.2,很麻烦

原理就是你的电脑依旧有两个版本的Python或者PyTorch,但是也对应存在了两个环境,默认本地的原环境是【base】,当你要切换到比如Python 1.0版本,那么我们直接切换一个环境到适用于这个版本的一个环境。

打比方:你娶了两个妻子,但正房跟二房两个水火不容、争风吃醋,那你今晚想跟1号妻子睡你就到她住的那个房子里睡,明晚你想跟2号妻子睡你就换到她的房子里睡......

那么前面我也说了,公司里的老大哥给我的项目就需要python 3.8,而我的是3.12,虽然都版本3,但是我还是尽量按照他的要求来,切换成python 3.8的

点击打开Anaconda Prompt

/

输入:conda create -n 这个版本的环境别名 python=要切换的版本号

然后会问你是否安装以上依赖,默认输入【y】表示确认

然后安装完毕,会询问你:“是否想激活切换到这个版本”

是的话我们输入:【conda  activate  刚刚给这个版本起的环境别名】

然后就能发现环境以及切换了

4、安装PyTorch

输入:【pip list】可以看到我们这个Python环境下,Python安装的所有依赖包

那么可以发现,我们并没有PyTorch,那么终于来到这一步,安装PyTorch

PyTorch安装官网:PyTorch

依旧是两种安装:

(1)新版本安装:

如果你没有特别要求,那么你安装新版本就行了

进入官网,往下拉找到这个地方

如果下载安装得很慢的话,可以去这个链接下载这两个程序:

https://pan.baidu.com/s/1CvTIjuXT4tMonG0WltF-vQ?pwd=jnnp 提取码: jnnp

复制粘贴到anacondas的安装路径下的pkgs这个路径

然后再重新执行刚才的安装命令就会变快了

 最后输入:【pip list】检查是否存在【torch】这个依赖包,有就成功了;没有就重新安装一遍

/

最后最后最后

输入【python】切换到python环境,然后输入【import torch】,如果没有报错就无敌!成功!完美!

(2)旧版本安装:

还是得选老版本,因为我要符合老大哥的环境要求

还是这个地方,找到上面一段文字里红色的链接,选旧版本就点他

/

然后找到你要的版本,按照图片这样选择要执行的命令,复制到Anaconda Prompt执行

最后输入:【pip list】检查是否存在【torch】这个依赖包,有就成功了;没有就重新安装一遍

 /

最后最后最后

输入【python】切换到python环境,然后输入【import torch】,如果没有报错就无敌!成功!完美!

另外,输入【torch.cuda.is_available()】显示True的话,就说明PyTorch可以使用我们电脑的GPU

5、Python编辑器安装

你得有这个你才能写代码,那么我不打算将这一块,因为我是先学的python再学PyTorch,而且这玩意安装简直是小脑瘫、唐人都可以无脑安装的,你甚至进了官网点下载然后安装一直乱点下去都能安装好,那我就不讲了,自己查。

三、创建适合PyTorch环境的Python项目

我这里用的是PyCharm这款编译器,那么这个最新版的PyCharm来创建配置Condas环境的python项目各种各样,方法很多,可以参考下面这两个,也可以跟着我的文章来都行。

其他博主的最新版配置教学视频:【2024最新版】保姆级Anaconda安装+PyCharm安装和基本使用,Python编程环境安装_哔哩哔哩_bilibili

最新版配置教学文章:Pycharm配置conda环境(解决新版本无法识别可执行文件问题)_conda可执行文件-CSDN博客

1、那么下面是我的个人安装步骤: 

我之前用它写过一些代码,用的是python 3.12版本(没有PyTorch的),那么就要切换到我们配置了PyTorch的Python环境中,点击左上角【文件】,点击【新建项目】重新新建一个项目

如果是新用户刚刚第一次打开,也是一样,点击【新建项目】

给你的项目定一个路径,切记,不可以有中文或奇怪符号

然后第一次用的用户,【解析器类型】这选择【基础condas】,然后会有个黄色提示,点击在这个提示右边的【选择路径】

然后这里选择我们刚刚【用Anacondas管理安装的含有PyTorch的这个Python.exe程序】。

具体路径在【你安装Anacondas的路径的 envs 你起的python环境别名的包 python.exe】

然后就进入到项目界面,到这还没完,你会发现你的项目是个空文件夹,连展开的那个小箭头都没有,这里是因为我们还需要手动导入【系统解释器】,相当于我们spring boot项目需要导入maven管理、JSP要引入web一样,你有这玩意他才知道 “噢你是condas老大的罩的python”,不然就会把你这个python项目当成 “没人理的流浪汉”。

点击右上角的【文件】,点击【设置】

然后选中【项目:xxxx...】(版本控制下面)—>【Python解释器】

然后点击【添加解释器】

/

这里有两种路径来配置这个condas的环境:

(1)第一种:选择【Conda环境】,然后导入Anacondas安装路径下的【Scripts】的【condas.exe】

(我没试过,我用的是第二种)

(2)第二种:选择【系统解释器】,不是上一个“Condas环境”!!

然后手动还是把刚刚新建项目时我们导入的Anacondas安装路径下的envs的“环境别名”的python.exe

/

然后返回【设置】,点【应用】【确定】,OK,等待配置扫描安装......

2、终端验证项目是否成功的报错解决方案

然后我们就可以打开右下角的终端,检查这个condas环境的python项目搭建好了没

但当时我一打开给我报了这么个错,如果有遇到相同情况的朋友,跟着我做,包不会错,很简单

看了别的博主文章才知道:是因为我们之前装java的环境的时候,java的环境变量在path的配置那里有误,【%JAVA_HOME%\bin】和【%JAVA_HOME%\jre\bin】不能两个两个连起来写,要分开

conda 启动报错 Invoke-Expression_windows10 conda invoke-expression : 所在位置 行:1 字符: 1-CSDN博客

切记!!切记!!!修改完系统变量后,PyCharm这边是不会自动更新的,要整个软件关掉、再打开,否则你再试个一百遍都是报错

关掉之后再打开,终端显示正常了:

3、最终验证是否成功

最后我们到(终端上两个,也就是第一个按钮)【Python 控制台】

再输入一次:【import torch】【torch.cuda.is_available()】,都没报错的话就大功告成!完美!!!!

输入一些python语法也正常运行

四、什么是数据集,以及初始Dataset

1、数据集

看了别的文章是这么说

这是一篇较详细的文章:什么是数据集?-CSDN博客

那么鄙人的粗浅见识认为:就是一堆给机器学习用的数据的集合,把人比做机器,那么数据集就是我们从出生到老死一直在听的、看的、吃的的一切的一切,我们看到蓝天知道天空是蓝色,我们闻到屎知道屎是香的,我们吃过老八秘制小汉堡才知道这玩意贼好吃......这一切的一切,都叫数据集,是这一切让我们有了我们人类的一套思考逻辑、判断逻辑、理解逻辑...当然这些还可以细分成各个领域,比如情感认知、学术知识、游戏体验......

那么这里提供一个数据集文件,以供我们后面学习用,大家可以自行下载

链接: https://pan.baidu.com/s/1JHnA4d0EU77r2ljeZlkCow?pwd=hrd4 提取码: hrd4

那么看这个文件下,就能大概知道这是干啥的

就是一些根据图片、文本label来“喂”给机器学习的数据集,一些资料

2、Dataset简单解释

那么Dataset又是什么?

我们把上面那个文件夹的文件当成你刚从毕业学长学姐那捡回来的一堆书、或者你从夸克上下载的一万部小电影,nei叫一个爽,但是,你也不是什么都学、什么都看吧?那堆书里有《厚黑学》、《圣经》、《c语言》、《计算机组成原理》.......夸克磁盘里有“猎奇”、“户外”、“直播录屏”、“兽..”、“欧美”...你不能一锅乱炖乱看吧?总得分个类吧?

那么Dataset就是这么个工具,帮机器把这对杂乱无章的数据分类整理,获取每个数据的label,并告诉机器一共有多少数据。

另外,我刚刚例子里说的那些:《厚黑学》、《圣经》、《c语言》、《计算机组成原理》.......“猎奇”、“户外”、“直播录屏”、“兽..”、“欧美”......这些就是数据集对应的【label】

五、初用Dataset

1、准备好数据集

把刚刚数据集里的【hymenopter_data.zip】解压

然后复制这个文件夹,直接粘贴到你的PyTorch的python项目里去,最好再新建一个目录叫“dataset”,专门用来放你的数据集的

2、学会python的获取图片资源

接下来我们简单了解一下python怎么获取图片,使用图片

(1)首先要用到Image这个工具包,导入Image包

# 首先导入Image包
from PIL import Image

(2)然后用一个变量获取某个图片的路径,绝对路径、相对路径都行,看你喜欢

# 然后用一个变量代替图片路径
imgPath = "你的图片路径"

这里可以直接右键复制文件的路径

别忘了粘贴时这个【/】符号可能会自动变错,我们自己手动调回来

(3)然后调用Image这个工具的open函数,里面传入图片路径的作为参数,就可以用这个图片了

# 然后调用Image的open函数把图片解析,比用一个变量接收
img = Image.open(imgPath)

(4)我们可以利用这个图片变量,调用它的属性、函数

比如打印大小

显示图片

(5)另外:如果我们不知道它有哪些属性、函数可以调用,那么我们可以在【Python控制台】将刚才的python代码再写一遍,右边可以显示对应的属性、函数,方便我们查看

(我有写import PIL import Image,只是控制台隐藏了)

完整代码:

# 首先导入Image包
from PIL import Image

# 然后用一个变量代替图片路径
imgPath = "F:/MyPythonProject/PyTrochProject1/dataset/train/ants/0013035.jpg"

# 然后调用Image的open函数把图片解析,比用一个变量接收
img = Image.open(imgPath)

print(img.size)
img.show()

3、利用os库工具获取所有图片

当然刚刚的Image只能对一个图片进行专门的处理,而要想获取所有图片资源,就得用到os这个工具包

1、导入os包

# 导入os包,获取存放所有图片的这个包
import os

2、用一个变量接收【存放所有图片的这个包】的【路径】(绝对相对都行,这里我用相对)

# 用一个变量接收存放所有图片的这个包的路径
imgListPath = "你放所有图片的包的路径"

3、然后调用os的listdir函数解析获取这个包,并把存放所有图片的包的路径作为参数传入

# 然后调用os的listdir函数解析获取这个包
imgList = os.listdir(imgListPath)

4、如果我们把代码写到【python控制台】,就能看到获取到所有图片,变成一个列表数据 

完整代码:

# 导入os包,获取存放所有图片的这个包
import os

# 用一个变量接收存放所有图片的这个包的路径
imgListPath = "dataset/train/ants"

# 然后调用os的listdir函数解析获取这个包
imgList = os.listdir(imgListPath)

print(imgList)
print(type(imgList))

4、利用Dataset,把所有图片整合成一个数据集并分类

(1)在这之前补充一下几个知识点

python的类里面可以不用定义成员变量,在函数里想用到的时候【self.成员变量】,就自动加上了

class myClass:
    def createName(self):
        # 并没有定义name这个变量,但是我直接在函数里加一个
        self.name = "KOBE"


classA = myClass()
print(classA.name) #照样打印出来

 然后【__init__】是构造函数

# 构造方法
def __init__(self, name=None, age=None, sex=None, phone=None):
    self.name = name
    self.age = age
    self.sex = sex
    self.phone = phone
    if name is not None and age is not None and sex is not None and phone is not None:
        print("构建一个完整对象完毕\n")
    else:
        print("构建一个空对象完毕\n")

【__setitem__函数】、【__getitem__函数】

【__setitem__函数】允许外界根据【索引】设置构造函数里【数据容器】类型成员变量的值

【__getitem__函数】提供索引,允许外界根据【索引】或【切片】形式获取【数据容器】类型成员变量的某个位置值

class myClass:
    # 构造函数并没有传参,也即是一个空参函数
    # 而items也并不是在函数外定义的一个类的成员变量,而且是【数据容器】类型(列表、元组、字典...)
    # 那就没有办法根据索引给这个items某个位值设置值
    def __init__(self):
        self.items = []

my_class = myClass()
my_class.items = [1, 2, 3, 4, 5] 
my_class.items[1] = 23  # 报错,不允许根据索引设置构造函数里设置的成员变量list


#####################################################
class myClass:
    def __init__(self):
        self.items = []

    def __getitem__(self, index):
        return self.items[index]

    # 利用__setitem__方法,提供给外界允许根据【索引】设置构造函数里定义的【数据容器】值的权限
    def __setitem__(self, index, value):
        self.items[index] = value

my_class = myClass()
my_class.items = [1, 2, 3, 4, 5]

# 使用索引方式设置元素
my_class.items[1] = 10 # 成功
print(my_list.items)  # 输出: [1, 10, 3, 4, 5]

【__len__】是魔法函数里的求长度函数

# __len__魔术方法:返回长度
def __len__(self):
    return len(self.name)

(2)正式写Dataset代码

首先,导入Dataset的包

from torch.utils.data import Dataset

然后别忘了导入Image和os包,获取图片

# 导入Image包
from PIL import Image
# 导入os包,获取存放所有图片的这个包
import os

然后,现在我们就可以创建一个专门管理数据集的类了,只需要在创建普通类的基础上,加一个括号,里面传入Dataset这个参数,这就是一个Dataset的类了

接下来我们细细分析一下我们所需要的东西

【获取所有文件的路径】

【其中这两个文件夹名字就是我们要的label】

一个表示“蚂蚁”,一个表示“蜜蜂”

【我们确切要拿到的每一个数据】

那么我们就可以理清一下思路:

1、首先我们要获取到存放所有文件的目录的路径

2、这个路径还不能直接直接固定死,要分开,因为我们要单独取出装有两类不同文件的文件夹的名字,作为数据集的【label】

3、我们要把“蚂蚁”、“蜜蜂”这两个数据分类里的所有文件,分别存到两个数据列表;然后在外界我们可以根据索引,单独取出列表中的其中一个图片资源

4、最后,我们要把两个数据分类整合成一个数据集,交由Dataset来管理即可

那么第一步就是创建一个Dataset类,然后在类里面处理好获取所有数据的逻辑,然后一个代表【蚂蚁】,一个代表【蜜蜂】,在外界根据传入不同的路径参数来获取不同的数据,最后整合到一起。

ok,来写代码!

完整代码:

#导入Dataset
from torch.utils.data import Dataset
# 导入Image包
from PIL import Image
# 导入os包,获取存放所有图片的这个包
import os

class myData(Dataset):
    def __init__(self, rootPath, labelPath):
        # 用变量接收外界传入的路径参数,其中labelPath是对应【蚂蚁】或【蜜蜂】
        self.rootPath = rootPath
        self.labelPath = labelPath
        # 利用os的.path.join()函数,把路径拼接起来(比如xxx和aaa,会自动在中间加一个"/",变“xxx/aaa”)
        self.path = os.path.join(self.rootPath, self.labelPath)
        # 最后利用os的listdir解析这个包路径下所有文件,并用一个数据列表接收
        self.imgListPath = os.listdir(self.path)
        print(self.imgListPath) #输出对应label路径下的所有图片的list

    # 根据索引获取到单独某个图片资源、图片名、图片label
    def __getitem__(self, index):
        # 获取当前index位置的图片名、以及解析图片资源
        # 这里注意:完整的图片路径是【存放所有图片的包路径(rootPath + labelPath)】+【单个图片的路径】
        imgName = self.imgListPath[index]
        # imgPath = self.imgListPath[index]
        imgPath = os.path.join(self.rootPath, self.labelPath, imgName)
        img = Image.open(imgPath)
        # 取出它属于哪个label
        label = self.labelPath
        return img, label

    # 利用__len__函数,返回当前这个label分类的图片列表一共有多少条数据
    def __len__(self):
        return len(self.imgListPath)

rootPath = "dataset/train"
labelPath1 = "ants"
labelPath2 = "bees"
# 传入不同的label的路径,获取创建两个数据集(【蚂蚁】和【蜜蜂】)
ants_dataset = myData(rootPath, labelPath1)
bees_dataset = myData(rootPath, labelPath2)
# 用多返回值就用多变量接收
ant_img, ant_label = ants_dataset[1]
bee_img, bee_label = bees_dataset[1]
# 调用测试一下能不能显示一张蚂蚁和一张蜜蜂的照片
ant_img.show()
bee_img.show()

# 最后,Dataset的整合数据集的大绝招:两个数据集(Dataset类)相加
train_dataset = ants_dataset + bees_dataset
# 验证一下,分别输出两个数据集有几条数据,再看一下整个数据集有几个数据
print(len(ants_dataset)) # 124
print(len(bees_dataset)) # 121
print(len(train_dataset)) # 245 = 124 + 121

这里我感觉我的注释足够清晰,我觉得我再多余写过多的文字反而不如看代码来得清晰,所以我在过多阐述......

那么到这,我们就算完成了初步的一个用Dataset整合机器学习所需要的数据集了

那么其实通常情况下,我们还会专门区分图片是图片,label是label,专门有一个label文件夹,里面存放所有对应每一张图片名的txt文件,而里面的内容就是它这个数据所归属的label名

这种形式的数据集又需要重新编写代码,请各位自己写,我累了...

下一篇讲TensorBoard

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

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

相关文章

从概念到落地:全面解析DApp项目开发的核心要素与未来趋势

随着区块链技术的迅猛发展,去中心化应用程序(DApp)逐渐成为Web3时代的重要组成部分。DApp通过智能合约和分布式账本技术,提供了无需信任中介的解决方案,这种去中心化的特性使其在金融、游戏、社交等多个领域得到了广泛…

金融行业如何高效管理新媒体矩阵

金融行业作为经济体系的重要一环,受到社会多方关注和监管。 前有“985大一投行实习日常”的短视频引发大众热议,后有某机构女员工自爆事件牵扯出多家金融机构,将金融行业一度推到了舆论的风口浪尖。 这两件事的接连出现,也把金融新…

飞天发布时刻:大数据AI平台产品升级发布

7月24日,阿里云飞天发布时刻产品发布会围绕阿里云大数据AI平台的新能力和新产品进行详细介绍。人工智能平台PAI、云原生大数据计算服务MaxCompute、开源大数据平台E-MapReduce、实时数仓Hologres、阿里云Elasticsearch、向量检索Milvus等产品均带来了相关发布的深度…

C++必修:STL之forward_list与list的使用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. forward_list与list forward_list 是 C 11 引入的一种容器,它是一…

LQR横向控制及融合PID纵向控制C++实现

目录 简介一、现代控制理论1.1 经典控制理论和现代控制理论的区别1.2 全状态反馈控制系统 二、LQR控制器2.1 连续时间2.1.1 Q、R矩阵的选取2.1.2 推导过程2.1.3 连续时间下的LQR算法步骤 2.2 离散时间2.2.1 连续LQR和离散LQR的区别2.2.2离散时间下的LQR算法步骤 三、LQR实现自动…

AI大模型之旅--安装向量库milvus

milvus,向量索引库 1.milvus部署 milvus的官方文档中看到最新版本的部署方式Install Milvus Standalone with Docker Compose curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh &#xf…

stm32f103c8t6与TB6612FNG解耦测试

stm32f103c8t6与TB6612FNG解耦测试 本文操作方式: 忽略底层,只做上层, 所以前面全部照搬步骤,重在调试 文章目录 stm32f103c8t6与TB6612FNG解耦测试本文操作方式:创建基本工程(1)跳转此链接,创建(2)创建电机驱动文件夹(3)PWM原理(4)电机转动控制 oled调试和key调试(5)OLED转速…

C++:奇异递归模板模式(CRTP模式)

奇异递归模板模式 文章目录 奇异递归模板模式理论说明CRTP模式的功能静态多态强制静态接口编译时多态优化解释 理论说明 奇异递归模板模式(Curiously Recurring Template Pattern, CRTP) 是一种设计模式,其原理很简单: 继承者将自…

工业三防平板赋能自动化产线打造工厂智慧管理

随着工业4.0时代的到来,智能制造成为了众多企业转型升级的必然选择。而MES系统作为智能制造的核心环节,能够有效地整合生产数据,提升生产效率,并实现工厂运营的数字化管理。然而,传统的MES系统大多依赖于PC端操作&…

关于vs调试的一些基本技巧方法,建议新手学习

文章目录 1.Debug 和 Release2.VS的调试快捷键3.对程序的监视和内存观察3.1监视3.2内存 4.编程常见错误归类4.1编译型错误4.2链接型错误4.3运行时错误 1.Debug 和 Release 在我们使用的编译器 vs 中,这个位置有两个选项,分别为Debug和Release&#xff0c…

开源应用:AI监测如何成为社会安全的智能盾牌

社会背景 随着社会的快速发展,社会安全管理正站在一个新时代的门槛上。社会对安全管理的需求不断增长,传统的安全措施已难以满足现代社会的需求。AI技术以其独特的数据处理和模式识别能力,正在成为我们社会安全的智能盾牌。 AI大模型识别功能…

【牛客】2024暑期牛客多校6 补题记录

文章目录 A - Cake(树上dp)B - Cake 2(暴力)D - Puzzle: Wagiri(tarjan)F - Challenge NPC 2(构造)H - Genshin Impacts Fault(签到)I - Intersecting Interv…

利用扩散模型DDPM生成高分辨率图像|(一)DDPM模型构建

利用扩散模型DDPM生成高分辨率图像(生成高保真图像项目实践) Mindspore框架利用扩散模型DDPM生成高分辨率图像|(一)关于denoising diffusion probabilistic model (DDPM)模型 Mindspore框架利用扩散模型DD…

数字音频工作站(DAW)FL Studio 24.1.1.4239中文破解版

FL Studio 24.1.1.4239中文破解版是一款功能强大的数字音频工作站(DAW),它广泛应用于音乐创作和音乐制作领域。FL Studio是由比利时软件公司Image-Line开发的音乐制作软件,它拥有丰富的音效、合成器、采样器、鼓机等工具。FL Stud…

stm32cubemx+ADC的多通道轮询数据采集和DMA数据采集实现,亲测可用

ADC是单片机的重要组成,也是存在一定的难点。 一、多通道轮询数据采集。 1、配置时钟,用的无源晶振。 2、SW烧写方式 添加USART 3、ADC选择了四个通道 其中两个是采集电压,另外两个是采集芯片内部温度和参考电压。 4、配置采集模式 这里是…

萌啦数据官网丨萌啦ozon数据分析工具官网

在当今这个数据驱动的时代,电子商务的蓬勃发展离不开精准的数据分析与洞察。对于在OZON平台上耕耘的商家而言,掌握市场趋势、优化产品布局、提升运营效率成为了赢得竞争的关键。正是在这样的背景下,萌啦数据官网应运而生,作为一款…

信用卡使用雷区大揭秘:为何你贷款被拒?

​好多朋友明明条件挺好,但申请银行贷款时却吃了闭门羹,一查征信,原来是信用卡使用上栽了跟头。信用卡可是个关键角色,用得好助力贷款,用得不好,直接拖后腿。今天咱们就聊聊信用卡对贷款申请的影响情况和解…

鸿蒙OS ArkTS 省市县级联选择框,封装组件

背景: 公司现在要开发纯血鸿蒙版本APP,我被抽调过来做点功能。现在要做一个省市县级联选择框,并且要封装为组件,供其他页面模块使用。 效果图: 难点: 1. 现在官方文档上只是查到了TextPicker组件是可以做…

建筑设计遇上这几个工具,就是锦上添花!

声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2161.html 当AI遇上建筑,设计界的火花就这样擦出来了!👀 身为一名内外饰设计工程师,你是否也在担心作品不经意间借鉴过了头…

Tomcat启动控制台乱码解决方案

前言 事情的起因是这样的,当时我用了阿里云osssdk里的代码下载文件,如下 ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName)); ,开始一切顺利,直到部署正式环境后,用了一段时间…