小土堆Pytorch笔记

一、pytorch环境配置及安装

Anaconda中文大蟒蛇,是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。

Windows安装Anaconda

选择python3.8,进入Anaconda Installers and Packages

选择Anaconda3-5.2.0-windows-x86.64.exe(可下最新版),跳过安装vscode,

在开始菜单打开Anaconda Prompt,如果出现(base)则安装成功

Linux安装Anaconda

apt-get install -y wget(Debian/Ubuntu系统)
yum install wget -y(CentOS系统)
wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh
chmod +x Anaconda3-2024.02-1-Linux-x86_64.sh
./Anaconda3-2024.02-1-Linux-x86_64.sh

然后敲击ENTER,输入yes,敲击ENTER,输入yes,conda -V检查是否安装成功

WIndows任务管理器检查显卡驱动,以下是常用命令:

conda create -n pytorch python=3.8(正常创建,已经有了同名的可以直接覆盖)
conda env create -f environment.yml(根据配置文件创建)
pip install -r requirements.txt(根据文本文件下载包)
conda info -e/conda env list(显示环境信息)
conda activate pytorch(激活环境)
conda list/pip list(不会显示关联环境的包)
pip freeze > requirements.txt(导出当前环境的包)
conda deactivate
conda remove -n pytorch --all/conda env remove -n pytorch(删除环境)

安装pytorch,进入首页https://pytorch.org/,推荐稳定版(Stable),

因为1.1以上加入了tensorboad,windows下选择conda,linux下选择pip,语言选择python3.8(视频当时的选择,现在更新了)

系统信息看不到gpu型号,控制面板->设备管理器->显示适配器查看,有英伟达显卡选择cuda11.8,集显选择none,复制安装命令

(视频当时版本)conda install pytorch torchvision cudatoolkit=9.2 -c pytorch -c defaults -c numba/label/dev
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

注意:cuda版本要和pytorch版本对应,否则torch.cuda.is_available()会False

进入https://www.geforce.com/hardware/technology/cuda/supported-gpu查看你的英伟达显卡是否支持cuda

输入nvidia-smi,cuda9.2以上需要驱动版本大于396.26,可以电脑管家或英伟达官网下载驱动

如果下载慢,把pytorch和cuda的包复制到conda的安装目录下的pkgs再输入命令

终端输入python进入python环境,

import torch
torch.cuda.is_available()

二、python编辑器选择、安装及配置

两种编辑器:pycharm下载社区版,jupyter可以交互

pycharm安装:选择不导入设置,跳过插件,创建新项目,编译器选择已存在,左边选择conda环境,右边选择pytorch路径下的python.exe

python console也可以输入指令检测是否成功导入conda的环境:

import torch
torch.cuda.is_available()

安装anaconda同时已经安装jupyter了,但是默认只安装在base环境,但是base环境没有安装pytorch,没有办法使用pytorch

两种解决方式,第一种base环境安装pytorch,另一种方式pytorch环境安装jupyter,我们选择第二种

jupyter需要ipykernel包,开始菜单点击jupyter notebook,base环境里conda list中有ipykernel

进入pytorch环境,conda install nb_conda,装不上换成conda install nb_conda_kernels

安装完成后在pytorch环境输入jupyter notebook,点击new,选择conda环境的pytorch,用命令torch.cuda.is_available()验证,shift+enter跳转到下一个代码块并且运行

三、FAQ

任务管理器或显示适配器查看gpu型号,进入https://www.geforce.com/hardware/technology/cuda/supported-gpu,查看是否支持cuda

输入nvidia-smi查看驱动版本是否大于396.26,软件管家升级或官网下载驱动

下载太慢,复制两个包,还是太慢需要特定指令让cuda使用本地文件安装,conda install --use-local 那两个包,输入两次,可以试着早上下载安装更快

四、python学习中两大法宝函数

两个函数大法宝,dir()打开,help()说明,是官方解释文档

打开pycharm选择项目文件夹,右下角有标记的是被用作pycharm的项目地址,选择的编译器python.exe现在变成.bat了

输入dir(torch.cuda),前后出现__表示它是函数,用help(torch.cuda.available)了解其含义

五、pycharm与jupyter使用和对比

设置>项目>项目解释器可以看到我们的python和pytorch版本,

添加配置,选择python,选择脚本位置,确定,或者右键运行会弹出要求配置

python文件≠python控制台≠jupyter,shift enter可以切换行块

python文件,优:通用,传播方便,适用于大型项目;缺:需要从头运行
python控制台,优:显示每个变量属性;缺:不利于代码阅读及修改
jupyter,优:利于代码阅读及修改;缺:环境需要配置

六、pytorch加载数据初识

Dataset:提供一种方式去获取数据及其标签label

dataloader:为后面的网络提供不同的数据形式

imageFolder放入Dataset(可选,好处是可以调用self.images = root.imgs),dataset放入DataLoader,dataLoader放入data_prefetcher(可选,实际上self.path[index % self.size] # make sure index is within then range)

七、Dataset类实战

Pycharm中terminal报错时,设置>工具>终端里改成cmd

pip install opencv-python下载cv2

继承Dataset类重写的__len__可以相加

八九、TensorBoard的使用

pytorch1.1加入Tensorboard,重名tag可以删除logs下文件重新在终端运行tensorboard

pip install tensorboard

terminal或anaconda Prompt输入

tensorboard --logdir=logs(事件文件所在文件名) --port=6007

tensorboard的add_image()参数为torch.tensor或numpy.array

np.array(img_PIL),PIL类型转换为numpy类型

十十一、Transforms的使用

transforms.ToTensor()可以将PIL.Image或numpy.ndarray转化为tensor类型

为什么需要tensor类型?tensor数据类型包装了反向神经网络所需要的一些参数

pip install opencv-python下载cv2

PIL.Imagenumpy.ndarraytorch.Tensor
读取图片Image.open()cv2.imread()/
显示图片img.show()cv2.imshow()tensorboard的add_image()
保存图片img.save()cv2.imwrite()torchvision.utils.save_image()
获取尺寸未知numpy.shapetensor.size() / tensor.shape
转换transform = transforms.ToPILImage()
img_pil = transform(numpy/tensor)
tensor.numpy()transform = transforms.ToTensor()
img_tensor = transform(PIL/numpy)
axis未知(高,宽,通道)(通道,高,宽)
取值[0, 255]读取时[0, 255]可变[0, 1]

十二十三、常见的transforms

transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])归一化:给每个通道平均值和标准差

compose,totensor,Normalize,Resize,RandomCrop,也可以放进自己定义的类哦!

transforms.Resize(),一般是元组,也可以是一个数,进行等比缩放,不改变高和宽的比例

transforms.RandomCrop(),两个数是高和宽,一个数裁剪的是正方形

不知道返回类型的时候print(type(x))

十四、torchvision

pytorch官网pytorch.org中,Docs下有核心、语音、文本、图像

torchvision中,有dataset,models(可以指定预训练的权重),transforms,utils(内有tensorboard)

Dataset模块:CocoDetection用于目标检测,CocoCaptions用于语义分割,MINST手写数字,CIFAR10/100物体识别

推荐download=True,已经下载了也不会重复下载

下载比较慢,将下载链接放在迅雷中,下载完复制到dataset文件夹当中,运行时会使用已下载的

若运行时未显示下载链接,ctrl点进源码,复制url即可

十五、Dataloader

num_workers加载数据进程数,=0为一个主进程,windows下>0可能会有问题

torchvision.datasets.ImageFolder 可以处理包含子目录下图片的根目录。它会自动识别根目录下的子目录,并将每个子目录视为一个类别,其中的图片文件作为该类别的样本。

from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 定义数据变换
transform = transforms.Compose([
    transforms.Resize((256, 256)),
    transforms.ToTensor()
])

# 创建 ImageFolder 数据集
dataset = datasets.ImageFolder(root='root', transform=transform)

# 创建 DataLoader
dataloader = DataLoader(dataset, batch_size=1, shuffle=False)

# 遍历所有图片路径和对应的类别
for img_path, label in dataloader.dataset.imgs:
    print(img_path, label)

十六、神经网络的基本骨架nn.Module的使用

container中torch.nn.Module是所有神经网络基本骨架,需要重写__init__和forward(前向传播)函数

因为继承的nn.Module中forword方法是__call__()方法的实现,调用对象会调用__call__()方法

调试时:单步执行自己代码会在自己写的代码中跳转而不会进入源码

十七、土堆说卷积操作

convolution卷积,conv2d表示二维

torch.nn是torch.nn.functional的封装

weight卷积核,bias偏置,stride步长,padding填充,group是分组卷积,对不同的通道使用不同的卷积核,言外之意一般是对每个通道使用相同卷积核

ctrl+p快速查看函数所需参数

十八、神经网络-卷积层

除了conv2d外,其他很少使用

dilation空洞卷积(指卷积核是空洞的),padding_mode填充方式

卷积核不用指定,随机初始化,训练时更新,卷积核的数值是从分布当中进行采样得到的

out_channel等于in_channel两倍时初始化两个卷积核,比如rgb是三个通道

output = torch.reshape(output, (-1, 3, 30, 30))中-1的值为总元素个数除以其他维度值相乘

ILSVRC比赛,2012年AlexNet,2014年GoogLeNet,VGG(常用vgg16),2015年ResNet

padding,stride参数可以根据官网的Hout,Wout公式推算

十九、神经网络-最大池化的使用

nn.MaxPool2d最大池化(下采样,最常用),nn.MaxUnpool2d(上采样),平均池化,nn.AdaptiveMaxPool2d(自适应最大池化)

ceil_mode=True表示进位,默认False,写论文会用到公式可以在官网查阅

若报错RuntimeError:“max_pool2d_with_indices_cpu” not implemented for Long,在tensor中加dtype=torch.float32

最大池化的作用:保留输入的特征,同时把数据量减少,比如视频变720P

卷积-池化-非线性激活

二十、神经网络-非线性激活

Padding Layers这一类几乎用不到,比如nn.ZeroPad2d在周围用0来填充,nn.ConstantPad2d用常数来填充

非线性激活的作用:神经网络中引入非线性的特质,才能训练出符合各种特征的模型

nn.ReLU()小于0进行截断,大于0不变,nn.Sigmoid非线性缩放到[0,1],1/1+exp-x,官网有图像

inplace=True表示把原来的值也改变(本来是通过返回值获取值)

二十一、神经网络-线性层及其他层介绍

Normalization Layers正则化层:加快神经网络的训练速度

nn.BatchNorm2d,num_feature即channel,其他默认即可

Recurrent Layers用于文字识别,特定的网络结构,用的不多

Transformer Layers特定的网络结构,用的不多,后面讲解

Linear Layers线性层:用的较多即全连接层,g=Σk*x+b,in_feature是x的个数,out_feature是g的个数,k是weight,b是bias

Dropout Layers随机将一些数设为0,防止过拟合

Sparse Layers特定的网络结构,用的不多,其中的Embedding用于自然语言处理

Distance Functions计算两个值之间的误差,常用余弦相似度,官网有公式

Loss Functions损失函数,常用值nn.MSELoss,nn.CrossEntropyLoss,nn.BCELoss,分布nn.NLLLoss,nn.KLDivLoss

torch.flatten()把输入展成一行,与reshape不同

container.sequential之后讲,torchvision.models提供了很多网络结构,有分类、语义分割、目标检测、实例分割、人体结构检测,文字和语音也有

二十二、神经网络-搭建小实战和Sequential的使用

torch.ones((64, 3, 32, 32))表示全1张量,可以对网络结构进行检验

writer.add_gragh()查看计算图,tensorboard --logdir=logs_seq,没必要使用graphviz+torchviz太麻烦

二十三、损失函数与反向传播

1.计算实际输出和目标之间的差距
2.为我们更新输出提供一定的依据(反向传播)

torch.nn.L1Loss(),绝对值∣x**ny**n∣,if reduction=‘mean’;if reduction=‘sum’.

torch.nn.MSELoss(),均方差(x**ny**n)2,if reduction=‘mean’;if reduction=‘sum’.

torch.nn.CrossEntropyLoss(),交叉熵(可能公式有变化),官网都有介绍,It is useful when training a classification problem with C classes.ouput是每个分类的概率

如果你看过一点机器学习的推导的话,优化器会有一个优化函数,那个函数你可以定性的理解为最小二乘,不同的优化函数对应不同的损失函数,mse是比较经典用于回归的损失函数,交叉熵常用于分类的损失函数

gradient descent梯度下降,没有result_loss.backward()的话查看梯度是None

二十四、优化器

optim.SGD()是pytorch中的随机梯度下降优化器

optim.zero_grad()把上一步的梯度清零,否则会累加

lr学习率,太大不稳定,太小收敛慢

optimizer.step()会对weight参数进行更新

二十五、现有网络模型的使用及修改

torchvision.models有分类、语义分割、目标检测,这节课讲分类模型

最常用vgg16,vgg19,pretrained表示训练好了,数据集用ImageNet,scipy一般都安装好了,pip install scipy

RuntimeError: The dataset is no longer publicly accessible. You need to download the archives externally and place them in the root directory.百度数据集链接复制到迅雷,ImageNet训练集150G太大了放弃了

print打印发现ImageNet线性层最后1000个,查了www.image-net.org官网确实是1000个类别,一般用ILSVRC2012,要学校邮箱注册

对vgg16现有网络进行修改迁移学习,比如再添加(1000,10)的线性层

.classifier.add_module(sequential/一个层),=直接修改

二十六、网络模型的保存与读取

保存了网络模型的结构和参数

import torch
import torch.nn as nn

# 定义一个简单的模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 5)

    def forward(self, x):
        return self.fc(x)

# 创建模型实例
model = SimpleModel()

# 保存整个模型
torch.save(model, 'full_model.pth')

# 加载整个模型
loaded_model = torch.load('full_model.pth')

# 可以继续使用加载的模型进行预测等操作

vgg16.state_dict()保存了网络模型的参数,字典形式,相比全部略小,因为大的就是参数

加载时候要把模型定义给复制过来,否则会报错,也可以from %定义模型的文件% import *

import torch
import torch.nn as nn

# 定义一个简单的模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 5)

    def forward(self, x):
        return self.fc(x)

# 创建模型实例
model = SimpleModel()

# 保存模型权重
torch.save(model.state_dict(), 'model_weights.pth')

# 加载模型权重
loaded_model = SimpleModel()
loaded_model.load_state_dict(torch.load('model_weights.pth'))

# 确保模型和加载的权重一致
loaded_model.eval()

# 可以继续使用加载的模型进行预测等操作

注意:直接loaded_model = torch.load(‘full_model.pth’)不行,出现No module named ‘model’,改用第二种方式

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

loss.item()加item()没差别,tensor加item()有差别打印可以输出数值

with torch.no_grad()里的代码梯度没有了,因为只需要测试,不需要反传梯度

训练完每一轮查看验证集的所有损失,下面是CPU运行输出结果:

D:\ProgramData\anaconda3\envs\pytorch\python.exe D:\University\nbuProject\exercise\pytorch_exercise\src\train.py 
Files already downloaded and verified
Files already downloaded and verified
训练数据集的长度为:50000
测试数据集的长度为:10000
-------第 1 轮训练开始-------
训练次数:100, Loss: 2.2815933227539062
训练次数:200, Loss: 2.271535873413086
训练次数:300, Loss: 2.212886095046997
训练次数:400, Loss: 2.1286516189575195
训练次数:500, Loss: 2.0074424743652344
训练次数:600, Loss: 1.9723464250564575
训练次数:700, Loss: 1.9965126514434814
整体测试集上的Loss: 310.2758778333664
整体测试集上的正确率: 0.2930999994277954
-------第 10 轮训练开始-------
训练次数:7100, Loss: 1.2701085805892944
训练次数:7200, Loss: 1.0269969701766968
训练次数:7300, Loss: 1.1585915088653564
训练次数:7400, Loss: 0.8122000098228455
训练次数:7500, Loss: 1.2483134269714355
训练次数:7600, Loss: 1.2678707838058472
训练次数:7700, Loss: 0.8957886099815369
训练次数:7800, Loss: 1.241050362586975
整体测试集上的Loss: 199.04056721925735
整体测试集上的正确率: 0.5478000044822693

进程已结束,退出代码0

正确率是分类问题比较特有的指标,tensorboard --logdir=logs_train

.argmax(1)表示横向,.argmax(0)表示纵向,输出:tensor([1,1, …])

(outputs.argmax(1) == targets)输出:tensor([False, True, …])

tudui.train()设置成训练模式(可选)

tudui.eval()设置成测试模式(可选)仅对一部分网络层有作用, 如Dropout、BatchNorm层

三十、利用GPU训练

可以.cuda()的部分:网络模型不需要赋值,损失函数不需要赋值,训练数据和测试数据imgs和target需要赋值

最好加上if torch.cuda.is_available():

可以使用如下代码对比CPU和GPU花费时间

start_time = time.time()
end_time = time.time()
print(end_time - start_time)

可以上https://colab.research.google.com使用谷歌的GPU,新建笔记本,输入以下内容:

import torch
print(torch._version__)
1.8.1+cu101
print(torch.cuda.is_available( ) )
False

发现不能使用GPU,点击修改>笔记本设置,硬件加速器选择GPU,每周可以免费使用30个小时,把训练代码复制过去

在python控制台或jupyter,运行在terminal需要加感叹号!nvidia-smi

第二种方式更常用,调用.to(device)

device = torch.device("cpu”)
Torch.device("cuda”)
Torch.device(“cuda:0”)(第一张显卡)
Torch.device(“cuda:1”)(第二张显卡)

可以使用语法糖device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

我的3070Ti laptop运行结果:

D:\ProgramData\anaconda3\envs\pytorch\python.exe D:\University\nbuProject\exercise\pytorch_exercise\src\train.py 
Files already downloaded and verified
Files already downloaded and verified
训练数据集的长度为:50000
测试数据集的长度为:10000
-------第 1 轮训练开始-------
训练次数:100, Loss: 2.289776563644409
训练次数:200, Loss: 2.2781457901000977
训练次数:300, Loss: 2.254847288131714
训练次数:400, Loss: 2.165113925933838
训练次数:500, Loss: 2.0603878498077393
训练次数:600, Loss: 2.035789966583252
训练次数:700, Loss: 2.0222959518432617
整体测试集上的Loss: 313.6828167438507
整体测试集上的正确率: 0.2806999981403351
-------第 10 轮训练开始-------
训练次数:7100, Loss: 1.2535332441329956
训练次数:7200, Loss: 0.9512690901756287
训练次数:7300, Loss: 1.1327733993530273
训练次数:7400, Loss: 0.8513917326927185
训练次数:7500, Loss: 1.2785077095031738
训练次数:7600, Loss: 1.183182954788208
训练次数:7700, Loss: 0.8764308094978333
训练次数:7800, Loss: 1.2747230529785156
整体测试集上的Loss: 194.28636491298676
整体测试集上的正确率: 0.5598999857902527

进程已结束,退出代码0

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

因为png格式是四个通道,处理RGB三通道外,还有一个透明度通道,所以需要调用image = image.convert(‘RGB’),保留其颜色通道,因为模型输入是三个通道,当然如果图片本来就是三个颜色通道,经过此操作不变,加上这一步后,可以适应png jpg各种格式图片,小土堆可以运行是因为不同截图软件保留的通道数是不一样的。

image = torch.reshape(image, (1, 3, 32, 32))网络输入需要batch_size需要reshape或者unsqeeze(0)

如果model.eval()有dropout或者batchnorm不加会出问题

with torch.no_grad():可以节约一些内存和性能,使用 with 语句可以确保在代码块执行完毕后,上下文管理器会被正确地清理掉

model = torch.load(model_path, map_location=torch.device('cpu'))表示在GPU上保存的模型加载到CPU

print(output.argmax(1))将输出转化成利于解决的方式

三十三、看看开源项目

github搜索pytorch,筛选star最多的

看一个CycleGAN项目,代码后面都有注释

运行python指令!./ scripts/train_cyclegan.sh
python train.py --dataroot ./datasets/maps --name maps_cyclegan --model cycle_gan

参数可以在参数列表找到,或在父类中寻找

参考:https://www.bilibili.com/video/BV1hE411t7RN


无废话解决实战中报错

提示:github拉下来的项目报错,在issue中搜索关键词

1. 所有conda环境都使用一个地方的包

Conda的虚拟环境应该使用对应虚拟环境中的包,通过which pip发现其位置在~/.local/bin/pip而非/usr/anaconda3/bin/pip

解决方案:在~/.profile/etc/profile中,在~/.local/bin后面设置PATH="/usr/anaconda3/bin:$PATH"

2.tensorboard运行后报错:Failed to fetch runs

搜了网上包括CSDN很多解决方案都没有用,要注意:

日志报错:TypeError: MessageToJson() got an unexpected keyword argument ‘including_default_value_fields’

解决方案是在对应环境下pip install protobuf==4.25.3

3.torch.cuda.OutOfMemoryError: CUDA out of memory.

一般情况就是爆显存了,通过减小batch_size或输入图片尺寸来减小计算图。

还有一种情况就是ctrl+z关闭的程序其实进程没有结束,应当ctrl+c。操作如下关闭进程:

  1. nvidia-smi
  2. 在看板的下方你会看到正在GPU上通过python指令运行的进程
  3. 查看它们的PID
  4. 删除这些进程kill -9 %PID_number%

4.vscode终端显示两个环境名

vscode python插件自动激活环境和服务器终端初始化自动激活base环境之间的不兼容导致的问题,解决方法是关闭conda的自动激活环境:

conda config --set auto_activate_base False

5.vscode远程plt.show()无法显示

右键>在交互窗口中运行

6.NVIDIA GeForce RTX 4090 with CUDA capability sm_89 is not compatible with the current PyTorch installation.

The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37.
If you want to use the NVIDIA GeForce RTX 4090 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/

显卡架构(sm_89)较新,旧版pytorch库不支持。

解决办法:conda remove pytorch,再输入上方链接的命令。

提示:环境的pytorch版本不影响代码和程序。

7.visdom遇到问题ERROR:tornado.access:500 GET / (::1) 2.10ms

pip uninstall visdom并用conda下载包

https://anaconda.org/conda-forge/visdom

8.wandb无法在Media输出键带’id’的图片

应该是出于安全原因,替换掉id即可

9.ImportError: DLL load failed while importing _imaging: 找不到指定的模块。

不建议使用windows,建议使用linux跑程序,windows经常会出现此类错误,linux不会出现此类错误,想在windows解决这个很麻烦

10.conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia运行后报错Collecting package metadata (current_repodata.json): | WARNING conda.models.version:get_matcher(556): Using .* with relational operator is superfluous and deprecated and will be removed in a future version of conda. Your spec was 1.7.1., but conda is ignoring the . and treating it as 1.7.1

done
Solving environment: unsuccessful initial attempt using frozen solve. Retrying with flexible solve.
Solving environment: unsuccessful attempt using repodata from current_repodata.json, retrying with next repodata source.
Collecting package metadata (repodata.json): | WARNING conda.models.version:get_matcher(556): Using .* with relational operator is superfluous and deprecated and will be removed in a future version of conda. Your spec was 1.9.0., but conda is ignoring the . and treating it as 1.9.0
WARNING conda.models.version:get_matcher(556): Using .* with relational operator is superfluous and deprecated and will be removed in a future version of conda. Your spec was 1.8.0., but conda is ignoring the . and treating it as 1.8.0
WARNING conda.models.version:get_matcher(556): Using .* with relational operator is superfluous and deprecated and will be removed in a future version of conda. Your spec was 1.6.0., but conda is ignoring the . and treating it as 1.6.0

conda config --remove-key channels

11.ERROR: Could not find a version that satisfies the requirement tensorflow==1.13.1

(from versions: 2.2.0, 2.2.1, 2.2.2, 2.2.3, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0rc0, 2.6.0rc1, 2.6.0rc2, 2.6.0, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.7.0rc0, 2.7.0rc1, 2.7.0, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.8.0rc0, 2.8.0rc1, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.9.0rc0, 2.9.0rc1, 2.9.0rc2, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0, 2.11.1, 2.12.0rc0, 2.12.0rc1, 2.12.0, 2.12.1, 2.13.0rc0, 2.13.0rc1, 2.13.0rc2, 2.13.0, 2.13.1)
ERROR: No matching distribution found for tensorflow==1.13.1

使用python3.8创建conda环境没有1.13.1版本的tensorflow,降低python版本即可:

conda create -n tf37 python=3.7
  • 26
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值