PyTorch深度学习快速入门教程(绝对通俗易懂!!!)

article/2025/10/19 18:25:37

文章目录

  • 一、PyTorch环境的配置及安装
  • 二、Pycharm、jupyter的安装
    • 1. Pycharm
    • 2.jupyter
  • 三、Python学习中的两大法宝函数(help、dir)
  • 四、加载数据(Dataset)
  • 五、TensorBorad的使用
  • 六、Transformer
    • 1.compose
    • 2.toTensor
    • 3.Normalize
    • 4.Resize
  • 七、torchvision中数据集的使用
    • 1.torchvision.datasets
  • 八、dataloader
    • 九、nn.module
    • 十、卷积操作
  • 十一、卷积层
  • 十二、池化层
  • 十三、非线性激活
  • 十四、线性层
  • 十五、Sequential
  • 十六、损失函数和反向传播
    • 1.损失函数
    • 2.反向传播及优化
  • 十七、现有模型的使用及修改
  • 十八、网络模型的保存和修改
    • 1.保存
    • 2.读取
  • 十九、完整的模型训练套路
  • 二十、利用GPU训练
  • 二十一、完整的模型验证套路
  • 总结


一、PyTorch环境的配置及安装

1.官网下载最新版Anaconda,完成后打开Anaconda Prompt,显示(base)即安装成功
2.conda create -n pytorch python=3.6建立一个命名为pytorch的环境,且环境python版本为3.6
3.conda activate pytorch激活并进入pytorch这个环境;linux:source activate pytorch
4.pip list来查看环境内安装了哪些包,可以发现并没有我们需要的pytorch
5.打开PyTorch官网,直接找到最新版pytorch指令conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch(无脑最新版就完事了。。。。老版本调了半天,最后还出问题了),打开pytorch环境,输入指令下载安装
6.检验是否安装成功。输入pythonimport torch不报错即pytorch安装成功。输入torch.cuda.is_available(),若返回True即机器显卡是可以被pytorch使用的(如失败,建议去英伟达官网下载更新驱动程序,并删除环境,使用各种最新版重新安装)。
7.linux服务器安装时出现环境安装不到conda/envs下,而在.conda下,进行如下操作
在这里插入图片描述

other:conda info -e (查看所有的虚拟环境)

删除环境:
第一步:首先退出环境
conda deactivate
第二步:删除环境
conda remove -n 需要删除的环境名 --all

rm -rf + 文件名 删除文件夹
df -h查看linux系统各分区的情况
nohup 命令 > 文件 2>&1 & # 使模型在后台训练 exit退出黑窗口
1.> 会重写文件,如果文件里面有内容会覆盖,没有则创建并写入。
2.>> 将内容追加到文件中,即如果文件里面有内容会把新内容追加到文件尾,如果文件不存在,就创建文件
kill -9 PID # 关闭特定进程
tar -xvf #解压tar包
查看当前文件夹的大小:du -ah
查看当前文件夹下面各个文件夹的大小:du -ah --max-depth=1
anaconda下的pkgs怎么清理:conda clean -a
ps u pid 查询显卡谁在使用
sudo chmod -R 777 myResources 修改文件的权限为所有用户拥有最高权限
pip install *** -i https://pypi.tuna.tsinghua.edu.cn/simple 镜像加速安装
ps -f -p 26359 可以看到进程26359在跑训练
cp -r /TEST/test1 /TEST/test2 复制文件夹
Defaulting to user installation because normal site-packages is not writeable : python3 -m pip install requests

fuser -v /dev/nvidia* nvidia-smi 无进程占用GPU,但GPU显存却被占用了

二、Pycharm、jupyter的安装

1. Pycharm

1.pycharm官网下载安装
2.新建项目(lean_pytorch),在这里插入图片描述
点击已存在的编译器,点进去寻找刚刚我们安装好的环境。在这里插入图片描述
导入成功。

2.jupyter

  1. 安装好anaconda后无需再次安装。
  2. jupyter默认安装在base环境中,所以我们需要在pytorch环境中安装jupyter.
  3. 进入pytorch环境,输入conda install nb_conda安装juypter
  4. 安装完成后输入juypter notebook即可打开。
  5. 在这里插入图片描述
    新建pytorch环境下的juypter文件。
  6. 输入import torch,torch.cuda.is_available(),返回TRUE即安装成功。

三、Python学习中的两大法宝函数(help、dir)

在这里插入图片描述

在这里插入图片描述
进入pycharm的python console,输入dir(torch),dir(torch.cuda),dir(torch.cuda.is_available()),help(torch.cuda.is_available)。

四、加载数据(Dataset)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from torch.utils.data import Dataset, DataLoader
import numpy as np
from PIL import Image
import os
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
from torchvision.utils import make_gridwriter = SummaryWriter("logs")class MyData(Dataset):def __init__(self, root_dir, image_dir, label_dir, transform):self.root_dir = root_dirself.image_dir = image_dirself.label_dir = label_dirself.label_path = os.path.join(self.root_dir, self.label_dir)self.image_path = os.path.join(self.root_dir, self.image_dir)self.image_list = os.listdir(self.image_path)self.label_list = os.listdir(self.label_path)self.transform = transform# 因为label 和 Image文件名相同,进行一样的排序,可以保证取出的数据和label是一一对应的self.image_list.sort()self.label_list.sort()def __getitem__(self, idx):img_name = self.image_list[idx]label_name = self.label_list[idx]img_item_path = os.path.join(self.root_dir, self.image_dir, img_name)label_item_path = os.path.join(self.root_dir, self.label_dir, label_name)img = Image.open(img_item_path)with open(label_item_path, 'r') as f:label = f.readline()# img = np.array(img)img = self.transform(img)sample = {'img': img, 'label': label}return sampledef __len__(self):assert len(self.image_list) == len(self.label_list)return len(self.image_list)if __name__ == '__main__':transform = transforms.Compose([transforms.Resize((256, 256)), transforms.ToTensor()])root_dir = "dataset/train"image_ants = "ants_image"label_ants = "ants_label"ants_dataset = MyData(root_dir, image_ants, label_ants, transform)image_bees = "bees_image"label_bees = "bees_label"bees_dataset = MyData(root_dir, image_bees, label_bees, transform)train_dataset = ants_dataset + bees_dataset# transforms = transforms.Compose([transforms.Resize(256, 256)])dataloader = DataLoader(train_dataset, batch_size=1, num_workers=2)writer.add_image('error', train_dataset[119]['img'])writer.close()# for i, j in enumerate(dataloader):#     # imgs, labels = j#     print(type(j))#     print(i, j['img'].shape)#     # writer.add_image("train_data_b2", make_grid(j['img']), i)## writer.close()

五、TensorBorad的使用

安装tensorborad:pip install tensorboard
在这里插入图片描述
更改端口:
在这里插入图片描述
在这里插入图片描述

六、Transformer

在这里插入图片描述

在这里插入图片描述

进入structure

1.compose

将几个步骤合为一个

2.toTensor

将PIL和numpy类型的图片转为Tensor(可用于训练)
在这里插入图片描述

__call__的使用:在这里插入图片描述
ctrl+p提示函数参数

3.Normalize

讲一个tensor类型进行归一化
在这里插入图片描述

4.Resize

在这里插入图片描述
tips:在这里插入图片描述

七、torchvision中数据集的使用

torchvision 是PyTorch中专门用来处理图像的库。这个包中有四个大类。

torchvision.datasets

torchvision.models

torchvision.transforms

torchvision.utils

这里主要介绍前三个。

1.torchvision.datasets

在这里插入图片描述
在这里插入图片描述

八、dataloader

在这里插入图片描述
drop_last=true,舍去最后的余数图片,如上半张图片将会舍去,下半张图片为FALSE
在这里插入图片描述

九、nn.module

在这里插入图片描述

十、卷积操作

在这里插入图片描述
在这里插入图片描述

十一、卷积层

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("../data", train=False, transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset, batch_size=64)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)def forward(self, x):x = self.conv1(x)return xtudui = Tudui()writer = SummaryWriter("../logs")step = 0
for data in dataloader:imgs, targets = dataoutput = tudui(imgs)print(imgs.shape)print(output.shape)# torch.Size([64, 3, 32, 32])writer.add_images("input", imgs, step)# torch.Size([64, 6, 30, 30])  -> [xxx, 3, 30, 30]output = torch.reshape(output, (-1, 3, 30, 30))writer.add_images("output", output, step)step = step + 1

十二、池化层

import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("../data", train=False, download=True,transform=torchvision.transforms.ToTensor())dataloader = DataLoader(dataset, batch_size=64)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=False)def forward(self, input):output = self.maxpool1(input)return outputtudui = Tudui()writer = SummaryWriter("../logs_maxpool")
step = 0for data in dataloader:imgs, targets = datawriter.add_images("input", imgs, step)output = tudui(imgs)writer.add_images("output", output, step)step = step + 1writer.close()

在这里插入图片描述

十三、非线性激活

input = torch.tensor([[1, -0.5],[-1, 3]])input = torch.reshape(input, (-1, 1, 2, 2))
print(input.shape)dataset = torchvision.datasets.CIFAR10("../data", train=False, download=True,transform=torchvision.transforms.ToTensor())dataloader = DataLoader(dataset, batch_size=64)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.relu1 = ReLU()self.sigmoid1 = Sigmoid()def forward(self, input):output = self.sigmoid1(input)return outputtudui = Tudui()writer = SummaryWriter("../logs_relu")
step = 0
for data in dataloader:imgs, targets = datawriter.add_images("input", imgs, global_step=step)output = tudui(imgs)writer.add_images("output", output, step)step += 1writer.close()

十四、线性层

import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("../data", train=False, transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(dataset, batch_size=64)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.linear1 = Linear(196608, 10)def forward(self, input):output = self.linear1(input)return outputtudui = Tudui()for data in dataloader:imgs, targets = dataprint(imgs.shape)output = torch.flatten(imgs)print(output.shape)output = tudui(output)print(output.shape)

十五、Sequential

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriterclass Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self, x):x = self.model1(x)return xtudui = Tudui()
print(tudui)
input = torch.ones((64, 3, 32, 32))
output = tudui(input)
print(output.shape)writer = SummaryWriter("../logs_seq")
writer.add_graph(tudui, input)
writer.close()

十六、损失函数和反向传播

1.损失函数

import torchvision
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("../data", train=False, transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(dataset, batch_size=1)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self, x):x = self.model1(x)return xloss = nn.CrossEntropyLoss()
tudui = Tudui()
for data in dataloader:imgs, targets = dataoutputs = tudui(imgs)result_loss = loss(outputs, targets)print("ok")

2.反向传播及优化

import torch
import torchvision
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear
from torch.optim.lr_scheduler import StepLR
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("../data", train=False, transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(dataset, batch_size=1)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self, x):x = self.model1(x)return xloss = nn.CrossEntropyLoss()
tudui = Tudui()
optim = torch.optim.SGD(tudui.parameters(), lr=0.01)
scheduler = StepLR(optim, step_size=5, gamma=0.1)
for epoch in range(20):running_loss = 0.0for data in dataloader:imgs, targets = dataoutputs = tudui(imgs)result_loss = loss(outputs, targets)optim.zero_grad()result_loss.backward()scheduler.step()running_loss = running_loss + result_lossprint(running_loss)

十七、现有模型的使用及修改

import torchvision# train_data = torchvision.datasets.ImageNet("../data_image_net", split='train', download=True,
#                                            transform=torchvision.transforms.ToTensor())
from torch import nnvgg16_false = torchvision.models.vgg16(pretrained=False)
vgg16_true = torchvision.models.vgg16(pretrained=True)print(vgg16_true)train_data = torchvision.datasets.CIFAR10('../data', train=True, transform=torchvision.transforms.ToTensor(),download=True)vgg16_true.classifier.add_module('add_linear', nn.Linear(1000, 10))
print(vgg16_true)print(vgg16_false)
vgg16_false.classifier[6] = nn.Linear(4096, 10)
print(vgg16_false)

十八、网络模型的保存和修改

1.保存

import torch
import torchvision
from torch import nnvgg16 = torchvision.models.vgg16(pretrained=False)
# 保存方式1,模型结构+模型参数
torch.save(vgg16, "vgg16_method1.pth")# 保存方式2,模型参数(官方推荐)
torch.save(vgg16.state_dict(), "vgg16_method2.pth")# 陷阱
class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.conv1 = nn.Conv2d(3, 64, kernel_size=3)def forward(self, x):x = self.conv1(x)return xtudui = Tudui()
torch.save(tudui, "tudui_method1.pth")

2.读取

import torch
from model_save import *
# 方式1-》保存方式1,加载模型
import torchvision
from torch import nnmodel = torch.load("vgg16_method1.pth")
# print(model)# 方式2,加载模型
vgg16 = torchvision.models.vgg16(pretrained=False)
vgg16.load_state_dict(torch.load("vgg16_method2.pth"))
# model = torch.load("vgg16_method2.pth")
# print(vgg16)# 陷阱1
# class Tudui(nn.Module):
#     def __init__(self):
#         super(Tudui, self).__init__()
#         self.conv1 = nn.Conv2d(3, 64, kernel_size=3)
#
#     def forward(self, x):
#         x = self.conv1(x)
#         return xmodel = torch.load('tudui_method1.pth')
print(model)

只用方式2!!!!

十九、完整的模型训练套路

在这里插入图片描述

import torchvision
from my_model import  *
from torch.utils.tensorboard import SummaryWriter#准备数据集
from torch import nn
from torch.utils.data import DataLoadertrain_data = torchvision.datasets.CIFAR10(root="../data",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_data = torchvision.datasets.CIFAR10(root="../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)# length 长度
train_data_size = len(train_data)
test_data_size = len(test_data)
# 如果train_data_size=10,训练数据集的长度为:10
print("训练数据集的长度为:{}".format(train_data_size))
print("测试数据集的长度为:{}".format(test_data_size))#利用 DataLoader 来加载数据集
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)#创建网络模型
tudui = Tudui()#损失函数
loss_fn = nn.CrossEntropyLoss()#优化器
learning_rate = 1e-2
optimizer = torch.optim.SGD(tudui.parameters(),lr=learning_rate)#训练网络的一些参数
#记录训练的次数
total_train_step = 0
#记录测试的次数
total_test_step = 0
#训练的轮数
epoch = 10#添加tensorboard
writer = SummaryWriter("../logs_train")for i in range(epoch):print("-----------第{}轮训练开始-----------".format(i+1))#训练步骤开始tudui.train()for data in train_dataloader:imgs,targets = dataoutputs = tudui(imgs)loss = loss_fn(outputs,targets)#优化器优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_step += 1if total_train_step % 100 == 0:print("训练次数:{},Loss:{}".format(total_train_step,loss.item()))writer.add_scalar("train_loss",loss.item(),total_train_step)# 测试步骤开始tudui.eval()total_test_loss = 0total_accuracy = 0with torch.no_grad():for data in test_dataloader:imgs,targets = dataoutputs = tudui(imgs)loss = loss_fn(outputs,targets)total_test_loss += lossaccuracy = (outputs.argmax(1)==targets).sum()total_accuracy += accuracyprint("整体集上的Loss:{}".format(total_test_loss))print("整体数据集上的正确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss",total_test_loss,total_test_step)writer.add_scalar("test_accuracy",total_accuracy/test_data_size,total_test_step)total_test_step += 1torch.save(tudui,"tudui_{}.pth".format(i))#torch.save(tudui.state_dict(),"tudui_{}".format(i))print("模型已保存")writer.close()

二十、利用GPU训练

在这里插入图片描述

import torchvision
from torch.utils.tensorboard import SummaryWriter
import torch
import time#准备数据集
from torch import nn
from torch.utils.data import DataLoaderdevice = torch.device("cuda")
train_data = torchvision.datasets.CIFAR10(root="../data",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_data = torchvision.datasets.CIFAR10(root="../data",train=False,transform=torchvision.transforms.ToTensor(),download=True)# length 长度
train_data_size = len(train_data)
test_data_size = len(test_data)
# 如果train_data_size=10,训练数据集的长度为:10
print("训练数据集的长度为:{}".format(train_data_size))
print("测试数据集的长度为:{}".format(test_data_size))#利用 DataLoader 来加载数据集
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)#创建网络模型
class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model = nn.Sequential(nn.Conv2d(3,32,5,1,2),nn.MaxPool2d(2),nn.Conv2d(32,32,5,1,2),nn.MaxPool2d(2),nn.Conv2d(32,64,5,1,2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64*4*4,64),nn.Linear(64,10))def forward(self,x):x=self.model(x)return x
tudui = Tudui()
tudui=tudui.to(device)#损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn = loss_fn.to(device)#优化器
learning_rate = 1e-2
optimizer = torch.optim.SGD(tudui.parameters(),lr=learning_rate)#训练网络的一些参数
#记录训练的次数
total_train_step = 0
#记录测试的次数
total_test_step = 0
#训练的轮数
epoch = 10#添加tensorboard
writer = SummaryWriter("../logs_train")start_time=time.time()
for i in range(epoch):print("-----------第{}轮训练开始-----------".format(i+1))#训练步骤开始tudui.train()for data in train_dataloader:imgs,targets = dataimgs = imgs.to(device)targets = targets.to(device)outputs = tudui(imgs)loss = loss_fn(outputs,targets)#优化器优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_step += 1if total_train_step % 100 == 0:end_time = time.time()print(end_time-start_time)print("训练次数:{},Loss:{}".format(total_train_step,loss.item()))writer.add_scalar("train_loss",loss.item(),total_train_step)# 测试步骤开始tudui.eval()total_test_loss = 0total_accuracy = 0with torch.no_grad():for data in test_dataloader:imgs,targets = dataimgs = imgs.to(device)targets = targets.to(device)outputs = tudui(imgs)loss = loss_fn(outputs,targets)total_test_loss += lossaccuracy = (outputs.argmax(1)==targets).sum()total_accuracy += accuracyprint("整体集上的Loss:{}".format(total_test_loss))print("整体数据集上的正确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss",total_test_loss,total_test_step)writer.add_scalar("test_accuracy",total_accuracy/test_data_size,total_test_step)total_test_step += 1torch.save(tudui,"tudui_{}.pth".format(i))#torch.save(tudui.state_dict(),"tudui_{}".format(i))print("模型已保存")writer.close()

二十一、完整的模型验证套路

# -*- coding: utf-8 -*-
# 作者:小土堆
# 公众号:土堆碎念
import torch
import torchvision
from PIL import Image
from torch import nnimage_path = "../imgs/airplane.png"
image = Image.open(image_path)
print(image)
image = image.convert('RGB')    # 因为png格式是四通道,除了RGB三通道外,还有一个透明度通道,
# 调用convert保留其颜色通道。当然,如果图片本来就是三个颜色通道,经此操作,不变。加上这一步可以适应png jpg各种格式的图片
transform = torchvision.transforms.Compose([torchvision.transforms.Resize((32, 32)),torchvision.transforms.ToTensor()])image = transform(image)
print(image.shape)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model = nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64*4*4, 64),nn.Linear(64, 10))def forward(self, x):x = self.model(x)return xmodel = torch.load("tudui_29_gpu.pth", map_location=torch.device('cpu'))
print(model)
image = torch.reshape(image, (1, 3, 32, 32))
model.eval()
with torch.no_grad():output = model(image)
print(output)print(output.argmax(1))

总结


http://chatgpt.dhexx.cn/article/OmNZLOPp.shtml

相关文章

Python安装Pytorch教程(图文详解)

最近人工智能等多门课需要复现论文,近两年的论文很多都是基于Pytorch环境做的实验,所以,这里总结一下Pytorch的安装教程,做好最快、最简单、最好地完成安装。 本机环境Win101050TiPython3.7 1、查看本机的CUDA版本 cmd命令行输…

Pytorch入门教程

👨‍💻作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享,公众号:GoAI的学习小屋,免费分享书籍、简历、导图等资料&a…

【Pytorch】2022 Pytorch基础入门教程(完整详细版)

一、Pytorch 1.1 简介 Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库&#xff0…

MacOS Ventura 13.4 (22F66) 带 OC 引导双分区黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 13.4 更新(内部版本号:22F66),本次更新距离上次发布隔了 41 天,主要解决了与Apple Watch自动解锁、蓝牙键盘、屏幕使用时间和VoiceOver相关的问题,推荐大家安装升级。…

装完黑苹果怎么装windows_苹果都说双系统好 黑苹果装windows教程

【IT168 应用】苹果官网上有段广告词——“妈妈总是说:“要和别人好好相处啊。”你的电脑也要这样。借助 OS X,你可以使用 Microsoft Office、与大多数打印机和摄像机相连、加入 PC 网络、甚至还可以运行 Windows。”。 可见苹果也将支持安装windows系统…

打造黑苹果(二)制作黑mac系统安装U盘

打造黑苹果(二)制作黑mac系统安装U盘 前言 在上一篇打造黑苹果(一)组装硬件的选择与组装 中,我们已经给大家在硬件上有了一个建议。如果你已经购买了硬件了,或者你原来的硬件就已经满足了黑MAC的需求&…

MacOS Ventura 13.4.1 (22F82) 带 OC 引导双分区黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 13.4.1 更新(内部版本号:22F82),根据Apple的发布说明,该更新提供了重要的安全修复,并建议所有用户进行更新。Apple还为无法运行Ventura的用户发布了macOS 11.7.8和mac…

小新Pro13成功安装黑苹果超详细教程,小白也会安装双系统!

前言 最近买了台小新pro13(i5版本),发现可以安装黑苹果,于是请教了很多大神,折腾了两天成功装上了黑苹果。 由于有人指导所以没走多少弯路,在这里感谢指导我安装的大神。因此,我决定把过程步骤…

可能是最详细的Win10+黑苹果双系统安装教程(For Dell 7580)

目录 1 前期准备1.1 工具和软件1.2 硬盘分区1.3 制作黑苹果安装U盘 2 正式安装2.1 黑苹果系统安装2.2 转移CLOVER文件2.3 添加CLOVER启动项 3 故障排查3.1 扬声器问题3.2 重启直接进win103.3 不显示U盘启动项3.4 应用程序副本已损坏3.5 黑苹果和Win10系统时间不一致 4 恢复Win1…

win10+黑苹果双系统教程教程

很多时候用macos系统都需要买苹果的笔记本,但我们可以模仿苹果的efi输入mac系统就可以完美运行了 首先我们需要知道我们的电脑能不能装黑苹果 最简单的方法就是去淘宝问一下,他说能装,就肯定可以干,然后去找对应的efi&#xff0…

黑苹果双系统安装教程macOS High Sierra 10.13.x

摘 要:今天小编给大家准备了一份最新的黑苹果10.13u盘安装黑苹果双系统安装教程,所有的黑苹果安装教程基本上都差不多,但是还有很多童鞋通过QQ联系我,问我如何安装黑苹...教程前言今天小编给大家准备了一份最新的黑苹果10.13u盘安…

win10+黑苹果 单硬盘 双系统 超简单安装 一看就会

注意:此教程全机型通用 ,只需要替换相关的efi文件即可。安装黑苹果的教程已经很多了,本人学的皮毛只适合跟我配置差不多的笔记本电脑,比如神州系列啥的。如果本文出现任何问题请及时指正,谢谢。 电脑型号 Notebook …

电脑win10黑苹果双系统

装黑苹果系统无可避免地要用到U盘,这里楼主安利一个不用U盘就可以安装黑苹果的方法 首先,一个电脑如果只有一个磁盘还要安装双系统,就要用到磁盘分区工具。这里我们用到的是diskgenius。 如果你的硬盘是512g的,这里建议你分一个1…

win10笔记本电脑双系统 安装黑苹果系统macOS 小白黑苹果乐园下载资源简便安装黑苹果方式,非常详细,还有资源!

马上就要考研咯,今天还是作死研究安装了下黑苹果,罪恶感啊 言归正传,接下来将献上我的黑苹果教程 首先呢第一步下载你所需要的macOS系统,地址如下 https://imac.hk/category/macos/ 这里也有我的几个保存在百度网盘里的黑苹…

win10+黑苹果 单硬盘的双系统引导配置

搜了多篇win10黑苹果双系统,按照步骤进行安装过程发现引导分区会误导,导致多分了一个引导分区,基本第一步就是直接让分200M左右的FAT32的分区作为引导分区。 首先需要知道的是引导分区的作用是什么?请看度娘的解释https://baike.b…

安装win10+黑苹果双系统零基础教程

经常有人留言或者私信我 我这边不能及时回复 一、准备工作 准备8g以上的U盘 安装TransMac 安装Hasleo EasyUEFI 安装DiskGenius 系统镜像,格式注意是.dmg,我示范的版本为mac 10.13.3 目前最新版镜像已经是10.15.4的版本了 镜像链接迅雷资源https://mirrors.d…

【电脑配置】开发人员必备,黑苹果双系统安装教程

首先把我自己的电脑配置贴出来供大家参考: CPU:Intel i7-8086k 主板:技嘉Z370 AORUS ULTRA GAMING WIFI 内存:海盗船 铂金统治者 3000C15 白光 8G*2 套条 改为酷兽DDR4 3200 8G*4,海力士颗粒。 显卡:镭…

最新最简单的黑苹果Mac Windows双系统教程(单双系统通用)

最新最简单的黑苹果Mac Windows双系统教程(单双系统通用) 关于抹盘“MediaKit报告设备上的空间不足以执行请求的操作”报错的处理关于双系统加引导 黑苹果Mac Windows双系统教程(单双系统通用) B站视频链接 如何自己配EFI教程 个人…

html当鼠标离开时触发事件,html中在鼠标指针移动到元素外时触发的事件属性onmouseout...

实例 当鼠标指针移动到图像之外时执行一段 JavaScript: 浏览器支持 IE Firefox Chrome Safari Opera 所有主流浏览器都支持 onmouseout 属性。 定义和用法 onmouseout 属性在鼠标指针移动到元素外时触发。 注释:onmouseout 属性不适用以下元素&#xff1…

JavaFX:鼠标事件

JavaFX:鼠标事件 fxml文件在最下面 fxml界面进入 MousePoint: setOnMouseEntered (461.77777777777777,208.0) MousePoint: setOnMouseMoved (461.77777777777777,208.0) 鼠标点击 MousePoint: setOnMousePressed (360.44444444444446,203.55555555555554) MousePoint: se…