【Python报错&解决】总结记录(3)

在Pycharm终端运行脚本

  1. >python进入python终端
  2. 修改路径(./是当前目录)

Torch not compiled with CUDA enabled

解释

“未编译带有CUDA启用的Torch”的错误消息,意思是使用的Torch版本不支持CUDA,或CUDA工具包未在系统上安装。

解决

  1. 检查CUDA是否已安装在系统上:

终端运行:nvcc -V
返回版本号则已安装;
未安装需从NVIDIA网站下载并安装。

  1. 已安装但是在python中无法调用时检查是否cuda与pytorch版本不兼容
    尝试多种办法后, 最好的解决办法是卸了重装。
    参考解决:关于cuda和pytorch不兼容问题
  • nvcc -V查询到的Cuda版本(11.7);
  • 创建、激活并进入自己的虚拟环境;
  • conda list查看已有的安装包及版本号,卸载;
  • 进入官网https://pytorch.org/复制版本对应的命令安装pytorch;(默认的)
  • conda list查看是否下载成功;
  • Pycharm配置解释器为刚才创建的虚拟环境
  • 代码验证:(输出正确版本号、True)
import torch

print('hello {}'.format(torch.__version__))
print(torch.cuda.is_available())

Ps此时出现的问题是,在pycharm中项目文件能运行,在终端却无法运行,需要给终端也配置环境。

nibabel.deprecator.ExpiredDeprecationError: get_data() is deprecated in favor of get_fdata(), which has a more predictable return type. To obtain get_data() behavior going forward, use numpy.asanyarray(img.dataobj).

解释

DeprecationWarning,意思是在nibabel 5.0版本中,get_data()方法已经被弃用,建议使用get_fdata()方法来代替。
【get_data()方法是nibabel中的一个方法,用于获取图像数据。然而,由于它的返回类型不够明确,可能会导致一些问题。因此,nibabel团队决定弃用get_data()方法,并建议使用get_fdata()方法来代替。】

解决

使用get_fdata()方法代替。

torch.cuda.OutOfMemoryError: CUDA out of memory.

解释

GPU已经达到了最大内存限制,无法再分配更多的内存空间。
【在PyTorch中,如果你的计算机内存不足以处理任务,PyTorch会尝试动态分配内存。但是,如果内存不足,PyTorch会抛出OutOfMemoryError异常。】

解决

参考:pytorch遇见RuntimeError: CUDA out of memory的解决

方法一

  1. 查看服务器显存占用情况:nvidia-smi
    【Python报错&解决】总结记录(3)_第1张图片仅一个GPU:0,所以跳过指定GPU的解决办法。

方法二

  1. 清除垃圾,释放内存:
# 第一种
torch.cuda.empty_cache()

# 第二种,在测试代码之前使用
with torch.no_grad()

#也可以两种并用

最终通过在测试代码之前加with torch.no_grad():解决此问题,注意一定要加在测试代码之前

ValueError: Image data has type int64, which may cause incompatibilities with other tools. To use this type, pass an explicit header or dtype argument to Nifti1Image().

解决

方法一

Convert the Nifti1Image object to a float data type:

import numpy as np

# Load the Nifti1Image object
nifti_image = ...

# Convert the data type to float
nifti_image = nifti_image.astype(np.float64)

方法二

Pass an explicit header or dtype argument when creating the Nifti1Image object:

# Load the Nifti1Image object with an explicit header or dtype argument
nifti_image = nifti1.Nifti1Image(data=np.array([...]), header=header, dtype=np.float64)

最终通过修改图像为浮点型解决:

pred_orig_nib = nibabel.Nifti1Image(pred_orig, None)

改为

pred_orig_nib = nibabel.Nifti1Image(pred_orig.astype(np.float32),None)

你可能感兴趣的:(Tipnotes,python,开发语言,笔记,经验分享,图像处理)