1 深度学习网络DNN

代码来自B站up爆肝杰哥

测试版本

import torch
import torchvisiondef print_hi(name):print(f'Hi, {name}')  if __name__ == '__main__':print_hi('陀思妥耶夫斯基')print("HELLO pytorch {}".format(torch.__version__))print("torchvision.version:", torchvision.__version__)print("torch.cuda.is_available? ", torch.cuda.is_available())x = torch.rand(3, 6)print(x)
Hi, 陀思妥耶夫斯基
HELLO pytorch 1.12.0
torchvision.version: 0.13.0
torch.cuda.is_available?  False
tensor([[0.7461, 0.6500, 0.3676, 0.5967, 0.1452, 0.3587],[0.0439, 0.9415, 0.9146, 0.8264, 0.3982, 0.3910],[0.2620, 0.0925, 0.9572, 0.6554, 0.2681, 0.0893]])

一个搭建过程

ts1=torch.randn(3,2)
ts1
tensor([[-1.3440,  1.6731],[ 0.2274,  1.1744],[-0.7912,  1.0309]])
# 转移到GPU上
# ts2=ts1.to('cuda:0')
# model = DNN().to('cuda:0') 
简单搭建
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
%matplotlib inlinefrom matplotlib_inline import backend_inline
backend_inline.set_matplotlib_formats('svg')
# 生成数据集
X1 = torch.rand(10000,1) # 输入特征 1
X2 = torch.rand(10000,1) # 输入特征 2
X3 = torch.rand(10000,1) # 输入特征 3
Y1 = ( (X1+X2+X3)<1 ).float() # 输出特征 1
Y2 = ( (1<(X1+X2+X3)) & ((X1+X2+X3)<2) ).float() # 输出特征 2
Y3 = ( (X1+X2+X3)>2 ).float() # 输出特征 3
Data = torch.cat([X1,X2,X3,Y1,Y2,Y3],axis=1) # 整合数据集
# Data = Data.to('cuda:0') # 把数据集搬到 GPU 上
Data.shape
torch.Size([10000, 6])
train_size=int(len(Data)*0.7)
test_size=len(Data)-train_size
Data=Data[torch.randperm(Data.size(0)),:] # 打乱样本顺序
train_Data = Data[:train_size, :]
test_Data = Data[train_size:, :]
train_Data.shape, test_Data.shape
(torch.Size([7000, 6]), torch.Size([3000, 6]))
class DNN(nn.Module):def __init__(self):''' 搭建神经网络各层 '''super(DNN, self).__init__()self.net = nn.Sequential(  # 按顺序搭建各层nn.Linear(3, 5),nn.ReLU(),  # 第 1 层:全连接层nn.Linear(5, 5),nn.ReLU(),  # 第 2 层:全连接层nn.Linear(5, 5),nn.ReLU(),  # 第 3 层:全连接层nn.Linear(5, 3)  # 第 4 层:全连接层)def forward(self, x):''' 前向传播 '''y = self.net(x)  # x 即输入数据return y  # y 即输出数据
model=DNN()
model
DNN((net): Sequential((0): Linear(in_features=3, out_features=5, bias=True)(1): ReLU()(2): Linear(in_features=5, out_features=5, bias=True)(3): ReLU()(4): Linear(in_features=5, out_features=5, bias=True)(5): ReLU()(6): Linear(in_features=5, out_features=3, bias=True))
)
# 查看内部参数(非必要)
for name, param in model.named_parameters():print(f"参数:{name}\n 形状:{param.shape}\n 数值:{param}\n")
参数:net.0.weight形状:torch.Size([5, 3])数值:Parameter containing:
tensor([[-0.3450, -0.0658, -0.4716],[ 0.4366, -0.2939, -0.2635],[ 0.0442, -0.4962, -0.2176],[ 0.0285, -0.1640, -0.2958],[ 0.0790,  0.4858,  0.1398]], requires_grad=True)参数:net.0.bias形状:torch.Size([5])数值:Parameter containing:
tensor([ 0.5582, -0.4712,  0.4455,  0.2119, -0.2546], requires_grad=True)参数:net.2.weight形状:torch.Size([5, 5])数值:Parameter containing:
tensor([[ 0.2466,  0.1161, -0.2335, -0.3888, -0.1425],[ 0.0706,  0.0777,  0.0081,  0.0236, -0.0326],[ 0.3518,  0.0702,  0.4115, -0.2355, -0.2249],[-0.0715, -0.1902, -0.1665, -0.1604, -0.1973],[-0.0658,  0.0639, -0.1540, -0.4332, -0.3613]], requires_grad=True)参数:net.2.bias形状:torch.Size([5])数值:Parameter containing:
tensor([ 0.3787,  0.2764,  0.2568,  0.3191, -0.2946], requires_grad=True)参数:net.4.weight形状:torch.Size([5, 5])数值:Parameter containing:
tensor([[-0.1057,  0.0083,  0.0652,  0.3027,  0.1454],[ 0.1724,  0.0562,  0.3369,  0.0071, -0.1573],[-0.3154, -0.0760,  0.0859, -0.3460, -0.0201],[ 0.2442, -0.3927, -0.0244, -0.2937,  0.1900],[ 0.3870, -0.3930,  0.1015, -0.2828, -0.0344]], requires_grad=True)参数:net.4.bias形状:torch.Size([5])数值:Parameter containing:
tensor([ 0.3448, -0.2331,  0.3587,  0.3233,  0.0216], requires_grad=True)参数:net.6.weight形状:torch.Size([3, 5])数值:Parameter containing:
tensor([[ 0.3056, -0.1478, -0.1536,  0.0831,  0.2769],[-0.2593, -0.4269,  0.1112, -0.0393, -0.4057],[-0.3688,  0.3386, -0.2689, -0.2382, -0.0796]], requires_grad=True)参数:net.6.bias形状:torch.Size([3])数值:Parameter containing:
tensor([-0.0037,  0.2068, -0.0956], requires_grad=True)
# 损失函数的选择
loss_fn = nn.MSELoss()
# 优化算法的选择
learning_rate = 0.01 # 设置学习率
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
# 训练网络
epochs = 1000
losses = []  # 记录损失函数变化的列表
# 给训练集划分输入与输出
X = train_Data[:, :3]  # 前 3 列为输入特征
Y = train_Data[:, -3:]  # 后 3 列为输出特征
for epoch in range(epochs):Pred = model(X)  # 一次前向传播(批量)loss = loss_fn(Pred, Y)  # 计算损失函数losses.append(loss.item())  # 记录损失函数的变化optimizer.zero_grad()  # 清理上一轮滞留的梯度loss.backward()  # 一次反向传播optimizer.step()  # 优化内部参数Fig = plt.figure()
plt.plot(range(epochs), losses)
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

在这里插入图片描述

# 测试网络
# 给测试集划分输入与输出
X = test_Data[:, :3]  # 前 3 列为输入特征
Y = test_Data[:, -3:]  # 后 3 列为输出特征
with torch.no_grad():  # 该局部关闭梯度计算功能Pred = model(X)  # 一次前向传播(批量)# 将每行最大的数置 1,将不是 1 的数字置 0Pred[:, torch.argmax(Pred, axis=1)] = 1Pred[Pred != 1] = 0correct = torch.sum((Pred == Y).all(1))  # 预测正确的样本数量total = Y.size(0)  # 全部的样本数量print(f'测试集精准度: {100*correct/total} %')
测试集精准度: 67.19999694824219 %
# 保存网络
torch.save(model, 'model.pth')
# 把模型赋给新网络
new_model = torch.load('model.pth')
# 测试网络
# 给测试集划分输入与输出
X = test_Data[:, :3]  # 前 3 列为输入特征
Y = test_Data[:, -3:]  # 后 3 列为输出特征
with torch.no_grad():  # 该局部关闭梯度计算功能Pred = new_model(X)  # 一次前向传播(批量)# 将每行最大的数置 1,将不是 1 的数字置 0Pred[:, torch.argmax(Pred, axis=1)] = 1Pred[Pred != 1] = 0correct = torch.sum((Pred == Y).all(1))  # 预测正确的样本数量total = Y.size(0)  # 全部的样本数量print(f'测试集精准度: {100*correct/total} %')
测试集精准度: 67.19999694824219 %

一个例子:批量梯度下降

import numpy as np
import pandas as pd
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
%matplotlib inline# 展示高清图
from matplotlib_inline import backend_inlinebackend_inline.set_matplotlib_formats('svg')
# 准备数据集
df = pd.read_excel('./深度学习(4):深度神经网络(DNN)/Data.xlsx', index_col=0) # 导入数据
arr = df.values # Pandas 对象退化为 NumPy 数组
arr = arr.astype(np.float32) # 转为 float32 类型数组
ts = torch.tensor(arr) # 数组转为张量
# ts = ts.to('cuda') # 把训练集搬到 cuda 上
ts.shape
torch.Size([759, 9])
# 划分训练集与测试集
train_size = int(len(ts) * 0.7)  # 训练集的样本数量
test_size = len(ts) - train_size  # 测试集的样本数量
ts = ts[torch.randperm(ts.size(0)), :]  # 打乱样本的顺序
train_Data = ts[:train_size, :]  # 训练集样本
test_Data = ts[train_size:, :]  # 测试集样本
train_Data.shape, test_Data.shape
(torch.Size([531, 9]), torch.Size([228, 9]))
class DNN(nn.Module):def __init__(self):super(DNN, self).__init__()self.net = nn.Sequential(nn.Linear(8, 32), nn.Sigmoid(),nn.Linear(32, 8),nn.Sigmoid(), nn.Linear(8, 4), nn.Sigmoid(),nn.Linear(4, 1), nn.Sigmoid())def forward(self, x):y = self.net(x)return ymodel = DNN()
loss_fn = nn.BCELoss(reduction='mean')
optimizer = torch.optim.Adam(model.parameters(), lr=0.005)# 训练网络
epochs = 5000
losses = []  # 记录损失函数变化的列表
# 给训练集划分输入与输出
X = train_Data[:, :-1]  # 前 8 列为输入特征
Y = train_Data[:, -1].reshape((-1, 1))
# 此处的.reshape((-1,1))将一阶张量升级为二阶张量for _ in range(epochs):Pred = model(X)loss = loss_fn(Pred, Y)losses.append(loss.item())optimizer.zero_grad()loss.backward()optimizer.step()Fig = plt.figure()
plt.plot(range(epochs), losses)
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

在这里插入图片描述

# 测试网络
# 给测试集划分输入与输出
X = test_Data[:, :-1]  # 前 8 列为输入特征
Y = test_Data[:, -1].reshape((-1, 1))  # 后 1 列为输出特征
with torch.no_grad():  # 该局部关闭梯度计算功能Pred = model(X)  # 一次前向传播(批量)Pred[Pred >= 0.5] = 1Pred[Pred < 0.5] = 0correct = torch.sum((Pred == Y).all(1))  # 预测正确的样本total = Y.size(0)  # 全部的样本数量print(f'测试集精准度: {100*correct/total} %')
测试集精准度: 69.7368392944336 %

接着上一个例子:改用小批量梯度下降

在使用小批量梯度下降时,必须使用 3 个 PyTorch 内置的实用工具(utils):

  • DataSet 用于封装数据集;
  • DataLoader 用于加载数据不同的批次;
  • random_split 用于划分训练集与测试集。
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader, random_split
import matplotlib.pyplot as plt
%matplotlib inline# 展示高清图
from matplotlib_inline import backend_inlinebackend_inline.set_matplotlib_formats('svg')

在封装我们的数据集时,必须继承实用工具(utils)中的 DataSet 的类,这
个过程需要重写_init_、_getitem_、__len__三个方法,分别是为了加载数据集、获取数据索引、获取数据总量。

# 制作数据集
class MyData(Dataset):  # 继承 Dataset 类def __init__(self, filepath):df = pd.read_excel(filepath, index_col=0)  # 导入数据arr = df.values  # 对象退化为数组arr = arr.astype(np.float32)  # 转为 float32 类型数组ts = torch.tensor(arr)  # 数组转为张量
#         ts = ts.to('cuda')  # 把训练集搬到 cuda 上self.X = ts[:, :-1]  # 前 8 列为输入特征self.Y = ts[:, -1].reshape((-1, 1))  # 后 1 列为输出特征self.len = ts.shape[0]  # 样本的总数def __getitem__(self, index):return self.X[index], self.Y[index]def __len__(self):return self.len
# 划分训练集与测试集
Data = MyData('./深度学习(4):深度神经网络(DNN)/Data.xlsx')
train_size = int(len(Data) * 0.7)  # 训练集的样本数量
test_size = len(Data) - train_size  # 测试集的样本数量
train_Data, test_Data = random_split(Data, [train_size, test_size])
# 批次加载器
train_loader = DataLoader(dataset=train_Data, shuffle=True, batch_size=128) # 在每个 epoch 开始时,数据会被随机打乱顺序
test_loader = DataLoader(dataset=test_Data, shuffle=False, batch_size=64)
class DNN(nn.Module):def __init__(self):super(DNN, self).__init__()self.net = nn.Sequential(nn.Linear(8, 32), nn.Sigmoid(),nn.Linear(32, 8),nn.Sigmoid(), nn.Linear(8, 4), nn.Sigmoid(),nn.Linear(4, 1), nn.Sigmoid())def forward(self, x):y = self.net(x)return y
model = DNN()
loss_fn = nn.BCELoss(reduction='mean')
optimizer = torch.optim.Adam(model.parameters(), lr=0.005)# 训练网络
epochs = 500
losses = []  # 记录损失函数变化的列表for _ in range(epochs):for (x,y) in train_loader:Pred = model(x)loss = loss_fn(Pred, y)losses.append(loss.item())optimizer.zero_grad()loss.backward()optimizer.step()Fig = plt.figure()
plt.plot(range(len(losses)), losses)
plt.show()

在这里插入图片描述

# 测试网络
correct = 0
total = 0
with torch.no_grad(): # 该局部关闭梯度计算功能for (x, y) in test_loader: # 获取小批次的 x 与 yPred = model(x) # 一次前向传播(小批量)Pred[Pred>=0.5] = 1Pred[Pred<0.5] = 0correct += torch.sum( (Pred == y).all(1) )total += y.size(0)
print(f'测试集精准度: {100*correct/total} %') # 可见这里小批量梯度下降比批量梯度下降效果好
测试集精准度: 76.31578826904297 %

手写数字识别

在 MNIST 中,模型的输入是一副图像,模型的输出就是一个与图像中对应的数字(0 至 9 之间的一个整数,不是独热编码)。我们不用手动将输出转换为独热编码,PyTorch 会在整个过程中自动将数据集的输出转换为独热编码.只有在最后测试网络时,我们对比测试集的预测输出与真实输出时,才需要注意一下。每个图像都是形状为28 × 28的二维数组。

在这种多分类问题中,神经网络的输出层需要一个 softmax 激活函数,它可以把输出层的数据归一化到 0-1 上,且加起来为 1,这样就模拟出了概率的意思。

import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import transforms, datasets
import matplotlib.pyplot as plt
%matplotlib inline# 展示高清图
from matplotlib_inline import backend_inlinebackend_inline.set_matplotlib_formats('svg')
# 数据集转换参数
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize(0.1307, 0.3081)])train_dataset = datasets.MNIST(root='./data',train=True,transform=transform,download=False)  # 我已下载,所以改成False,没下载改成True,test_dataset同理
test_dataset = datasets.MNIST(root='./data',train=False,transform=transform,download=False)
train_loader = DataLoader(dataset=train_dataset, batch_size=128, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=128, shuffle=False)

每个样本的输入都是形状为28 × 28的二维数组,那么对于 DNN 来说,输入层的神经元节点就要有28 × 28 = 784个;输出层使用独热编码,需要 10 个节点。

class DNN(nn.Module):def __init__(self):''' 搭建神经网络各层 '''super(DNN, self).__init__()self.net = nn.Sequential(  # 按顺序搭建各层nn.Flatten(),  # 把图像铺平成一维nn.Linear(784, 512),nn.ReLU(),  # 第 1 层:全连接层nn.Linear(512, 256),nn.ReLU(),  # 第 2 层:全连接层nn.Linear(256, 128),nn.ReLU(),  # 第 3 层:全连接层nn.Linear(128, 64),nn.ReLU(),  # 第 4 层:全连接层nn.Linear(64, 10)  # 第 5 层:全连接层)def forward(self, x):''' 前向传播 '''y = self.net(x)  # x 即输入数据return y  # y 即输出数据
model = DNN()
loss_fn = nn.CrossEntropyLoss() # 自带 softmax 激活函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01,momentum=0.5)# 训练网络
epochs = 5
losses = []  # 记录损失函数变化的列表for _ in range(epochs):for (x,y) in train_loader:Pred = model(x)loss = loss_fn(Pred, y)losses.append(loss.item())optimizer.zero_grad()loss.backward()optimizer.step()Fig = plt.figure()
plt.plot(range(len(losses)), losses)
plt.show()

在这里插入图片描述

# 测试网络
correct = 0
total = 0
with torch.no_grad(): # 该局部关闭梯度计算功能for (x, y) in test_loader: # 获取小批次的 x 与 yPred = model(x) # 一次前向传播(小批量_, predicted = torch.max(Pred.data, dim=1) # 每一行最大值,最大值对应的列索引correct += torch.sum( (predicted == y) )total += y.size(0)print(f'测试集精准度: {100*correct/total} %') 
测试集精准度: 95.16999816894531 %

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

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

相关文章

2024后端开发面试题总结

一、前言 上一篇离职贴发布之后仿佛登上了热门&#xff0c;就连曾经阿里的师兄都看到了我的分享&#xff0c;这波流量真是受宠若惊&#xff01; 回到正题&#xff0c;文章火之后&#xff0c;一些同学急切想要让我分享一下面试内容&#xff0c;回忆了几个晚上顺便总结一下&#…

mybatis查询数据字段返回空值

1.描述 数据苦衷实际存储字段全不为空 查询后brand_name/company_name为空 2.原因分析 带下划线的字段&#xff0c;都会返回空值&#xff0c;应该是字段映射出了问题 3.解决方案 在配置文件中添加下划线自动映射为驼峰 <configuration><settings><sett…

【计算机网络】OSPF单区域实验

一&#xff1a;实验目的 1&#xff1a;掌握在路由器上配置OSPF单区域。 2&#xff1a;学习OSPF协议的原理&#xff0c;及其网络拓扑结构改变后的变化。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。…

STM32+ESP8266-连接阿里云-物联网通用Android app(2)

前言 接着上一篇的文章创建好了设备&#xff0c;云产品转发&#xff0c;让STM32连接上阿里云&#xff0c;发布和订阅了相关主题。本篇文章来编写一个Android app来进行控制STM32和接收传感器数据显示在屏幕上。基于Android studio。 演示视频 实现一个简单的app来控制stm32开…

Django-3.3创建模型

创建模型&#xff08;models&#xff09;的时候&#xff0c; 1&#xff1a;我们需要这个模型是哪个文件下面的模型&#xff08;models&#xff09;&#xff0c;我们需要在配置文件中吧应用安装上&#xff08;安装应用&#xff1a;INSTALLED_APPS&#xff09; 2&#xff1a;找对…

【机器学习】不同操作系统下如何安装Jupyter Notebook和Anaconda

引言 Jupyter Notebook 是一个非常流行的开源Web应用程序&#xff0c;允许你创建和共享包含代码、方程、可视化和解释性文本的文档 文章目录 引言一、如何安装Jupyter Notebook1.1 对于Windows用户1.2 对于macOS用户1.3 对于Linux用户&#xff1a; 二、如何安装Anaconda2.1 对于…

《python程序语言设计》第6章13题 数列求和编写一个函数计算

正确代码 def sumNumber(integer_num):print(" i || m(i)")print("-"*30)a 0for i in range(1, integer_num 1):a i / (i 1)print("{:4d} || {:.4f}".format(i, a))sumNumber(20)结果如下

使用 leanback 库 GridView 管理AnroidTV的焦点

一、前情提要 我当前需要开发一个TV应用&#xff0c;但是之前处理过的焦点问题的很少&#xff0c;现在空下来了&#xff0c;对过往的工作做一个总结分享。在手机APP开发中常用的 RecycleView 在 TV 中开发时&#xff0c;无法解决大量的焦点问题&#xff0c;所以使用leanback进…

ElasticSearch核心之DSL查询语句实战

什么是DSL&#xff1f; Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的&#xff0c;所以你必…

git 学习总结

文章目录 一、 git 基础操作1、工作区2、暂存区3、本地仓库4、远程仓库 二、git 的本质三、分支git 命令总结 作者: baron 一、 git 基础操作 如图所示 git 总共有几个区域 工作区, 暂存区, 本地仓库, 远程仓库. 1、工作区 存放项目代码的地方&#xff0c;他有两种状态 Unm…

2024新版 黑马程序员《C++零基础入门》笔记——第一章24 三元运算符

1.三元运算符 2.代码实践 #include "iostream" using namespace std;int main() {// 表达式? v1 : v2;int num1, num2;cout << "请输入num1的值" << endl;cin >> num1;cout << "请输入num2的值" << endl;cin >…

Flink-CDC解析(第47天)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. CDC 概述1.1 什么是CDC&#xff1f;1.2 CDC的实现机制1) 基于主动查询的 CDC&#xff1a;2) 基于事件接收CDC&#xff1a; 前言 本文主要概述了Flink-CDC. …

万界星空科技灯具行业MES系统:点亮生产管理的未来

在快速迭代的灯具行业中&#xff0c;高效、精准的生产管理是企业保持竞争力的关键。万界星空科技推出的灯具行业MES&#xff08;制造执行系统&#xff09;系统&#xff0c;以其强大的功能和完善的管理体系&#xff0c;正成为众多灯具生产企业的首选解决方案。本文将重点介绍万界…

u盘文件删除如何恢复?u盘恢复数据的8个诀窍,新手必看!

随着互联网的普及&#xff0c;u盘已成为人手必备的一个工具&#xff0c;承载着我们许多的重要文件和数据。然而&#xff0c;当意外删除或丢失这些关键数据时&#xff0c;我们常常会感到无助。您是否也曾经面对过u盘文件误删的尴尬吗&#xff1f;亦或者是否曾为如何从u盘中恢复已…

【漏洞复现】phpStudy 小皮 Windows面板 存在RCE漏洞

靶场资料后台自行领取【靶场】 image-20240726092307252 PhpStudy小皮面板曝RCE漏洞&#xff0c;本质是存储型XSS引发。攻击者通过登录用户名输入XSS代码&#xff0c;结合后台计划任务功能&#xff0c;实现远程代码执行&#xff0c;严重威胁服务器安全。建议立即更新至安全版…

Study--Oracle-07-ASM相关参数(四)

一、ASM主要进程 1、ASM主要后台进程 ASM实例除了传统的DBWn、LGWR、CKPT、SMON和PMON等进程还包含如下几个新后台进程: 2、牛人笔记 邦德图文解读ASM架构,超详细 - 墨天轮 二、数据库实例于ASM实例之间的交互关系 数据库实例与ASM实例之间的交互关系涉及多个步骤和过程,…

ICML最佳论文SD3上线公共教程!DreamBench++图像自动评估新基准来了,实现人类偏好深度对齐

近日&#xff0c;ICML 2024 最佳论文公布了&#xff01;其中就包含年度图像生成的「网红模型」——Stable Diffusion 3&#xff08;简称 SD3&#xff09;。SD3 是由 Stability AI 开发的最新文本到图像生成模型&#xff0c;前段时间已经全网开源&#xff01;HyperAI 超神经现已…

【PyCharm】PyCharm 2024.1 的最新变化-代码补全与智能提示

目录 代码补全与智能提示 更智能的代码补全功能 基于机器学习的代码建议 上下文相关的代码片段推荐 全行代码补全支持 (JavaScript 和 TypeScript) 本地 ML 模型的全行补全 示例 示例 1: 基于上下文的代码建议 示例 2: 全行代码补全 详细对比示例 示例 3: 传统代码补…

【iOS】3G share仿写

3G share 前言登录、注册界面首页搜索搜索更换照片折叠cell 文章活动我的 前言 本周进行了3G share的仿写&#xff0c;这个仿写内容较多&#xff0c;用到了很多之前学习的东西&#xff0c;也学习了许多的新知识。 登录、注册界面 这两个界面主要运用属性传值和协议传值&…

5. 开发环境搭建

1. 概述 基于ubuntu20.04搭建开发环境 2. 开发环境安装 恒玄SDK编译&#xff0c;依赖gcc-arm的编译工具&#xff0c;编译工具由恒玄提供&#xff1b; 2.1 配置编译工具链的环境变量 修改~/.profile文件 source ~/.profile 2.2 安装依赖包 sudo apt install ccache sudo a…