校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > PyTorch 編寫代碼遇到的問題及解決方案

PyTorch 編寫代碼遇到的問題及解決方案

熱門標簽:地圖標注面積 所得系統電梯怎樣主板設置外呼 北瀚ai電銷機器人官網手機版 朝陽手機外呼系統 市場上的電銷機器人 小蘇云呼電話機器人 北京電銷外呼系統加盟 儋州電話機器人 佛山400電話辦理

PyTorch編寫代碼遇到的問題

錯誤提示:no module named xxx

xxx為自定義文件夾的名字

因為搜索不到,所以將當前路徑加入到包的搜索目錄

解決方法:

import sys
sys.path.append('..') #將上層目錄加入到搜索路徑中
sys.path.append('/home/xxx') # 絕對路徑
import os
sys.path.append(os.getcwd()) #  #將當前工作路徑加入到搜索路徑中

還可以在當前終端的命令行設置

export PYTHONPATH=$PYTHONPATH:./

錯誤提示:AttributeError: ‘NoneType' object has no attribute ‘shape' height, width, channel = img.shape

在Linux系統下img.shape報錯AttributeError: ‘NoneType' object has no attribute ‘shape'

img=cv2.imread(),讀取一張圖片時,img.shape是包含三個量的元組,分別是:

img.shape[0]:圖像的高度

img.shape[1]:圖像的寬度

img.shape[2]:圖像的通道數

解決方法:讀的文件出錯 或者查看文件路徑是否正確

錯誤提示 :TypeError: slice indices must be integers or None or have an index method

cropped_im = img[ny1 : ny2, nx1 : nx2, :]

解決方法:需要將ny1 : ny2, nx1 : nx2轉換成int類型

錯誤提示 :Input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the same

以下三小段分別是Data type CPU tensor GPU tensor

32-bit floating point torch.FloatTensor torch.cuda.FloatTensor

64-bit floating point torch.DoubleTensor torch.cuda.DoubleTensor

出錯在類型轉換

np.float更改為np.float32

import torchvision.transforms as transforms
import numpy as np
transform = transforms.ToTensor()
def convert_image_to_tensor(image):
    """convert an image to pytorch tensor
        image: numpy array , h * w * c
        image_tensor: pytorch.FloatTensor, c * h * w
        """
    image = image.astype(np.float32) 
    return transform(image)

錯誤提示:RuntimeError: zero-dimensional tensor (at position 0) cannot be concatenated

版本問題 舊式寫法

import torch
x = torch.tensor(0.1)
y = torch.tensor(0.2)
z = torch.cat((x, y))

改成新式寫法

x = torch.tensor([0.1])
y = torch.tensor([0.2])
z = torch.cat((x, y))
print(z)

結果

tensor([0.1000, 0.2000])

錯誤提示:TypeError: ‘float' object is not subscriptable

多了下標 a = x.tolist()[0]

去除下標 a = x.tolist()

錯誤提示:argument ‘input' (position 1) must be Tensor, not list

需要將list轉換成tensor

假設a是list

torch.tensor(a)

GPU模型和CPU模型之間的轉換

假設原來保存的是GPU模型,要轉換為CPU模型

torch.save(model, os.path.join( "./complete.pth"))
cpu_model = torch.load("./complete.pth", map_location=lambda storage, loc: storage)
dummy_input = torch.randn(1, 3, 224, 224)

假設原來保存的是CPU模型,要轉換為GPU模型

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
torch.save(model, os.path.join( "./complete.pth"))
gpu_model = torch.load("./complete.pth", map_location=lambda storage, loc: storage.cuda)
dummy_input = torch.randn(1, 3, 224, 224)
dummy_input = dummy_input.to(device)

錯誤提示 RuntimeError: Subtraction, the - operator, with a bool tensor is not supported. If you are trying to invert a mask, use the ~ or logical_not() operator instead.

原代碼

# Store only unsuppressed boxes for this class
image_boxes.append(class_decoded_locs[1 - suppress])
image_labels.append(torch.LongTensor((1 - suppress).sum().item() * [c]).to(device))
image_scores.append(class_scores[1 - suppress])

更改為

image_boxes.append(class_decoded_locs[~suppress])
image_labels.append(torch.LongTensor((~ suppress).sum().item() * [c]).to(device))
image_scores.append(class_scores[~suppress])

錯誤提示 RuntimeError: Expected object of scalar type Byte but got scalar type Bool for argument #2 ‘other' in call to _th_max

原代碼

suppress = torch.zeros((n_above_min_score), dtype=torch.uint8).to(device) 

更改為

suppress = torch.zeros((n_above_min_score), dtype=torch.bool).to(device)  

UserWarning: volatile was removed and now has no effect. Use with torch.no_grad(): instead.

#之前舊版本
...
x = Variable(torch.randn(1), volatile=True)
return x

#新版
with torch.no_grad():
    ...
    x = torch.randn(1)
return x

錯誤提示

RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count() is 1. Please use torch.load with map_location to map your storages to an existing device.

或者是 RuntimeError: expected device cuda:0 but got device cuda:1

錯誤原因之一

使用了CUDA 1顯卡訓練保存的模型文件,使用CUDA 0驗證

代碼中寫了

device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)

可以在命令行設置讓哪些GPU可見

export CUDA_VISIBLE_DEVICES=1 #GPU編號
export CUDA_VISIBLE_DEVICES=0,1,2,3#4張顯卡可見

也可以在代碼里改成

checkpoint = torch.load(checkpoint,map_location=‘cuda:0')

錯誤提示

raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8097): Max retries exceeded with url: /update (Caused by NewConnectionError('urllib3.connection.HTTPConnection object at 0x7f3111915e80>: Failed to establish a new connection: [Errno 111] Connection refused',))
Exception in user code:

解決方案

因為沒有啟動visdom可視化程序,所有報錯

在終端執行命令 visdom之后就能看到如下信息

Checking for scripts.
It's Alive!
INFO:root:Application Started
You can navigate to http://localhost:8097

nn.Module.cuda() 和 Tensor.cuda()

無論是對于模型還是數據,cuda() 都能實現從CPU到GPU的內存遷移,但是他們的作用效果有所不同。

Model:

model = model.cuda()
model.cuda()

上面兩句能夠達到一樣的效果,即對model自身進行的內存遷移

Tensor:

model = Model()
tensor = torch.zeros([2, 3, 10, 10])
model.cuda()
tensor.cuda()
tensor_cuda = tensor.cuda()
model(tensor) # 會報錯
model(tensor_cuda) # 正常運行

和 nn.Module 不同,調用 tensor.cuda 只是返回這個 tensor 對象在 GPU 內存上的拷貝,而不會對自身進行改變。因此必須對 tensor 進行重新賦值,即 tensor = tensor.cuda()

PyTorch 0.4 計算累積損失的不同

以廣泛使用的模式 total_loss += loss.data[0] 為例。Python0.4.0 之前,loss 是一個封裝了 (1,) 張量的 Variable,但 Python0.4.0 的 loss 現在是一個零維的標量。對標量進行 索引是沒有意義的(似乎會報 invalid index to scalar variable 的錯誤)。使用 loss.item() 可以從標量中獲取 Python 數字。所以改為:

total_loss = total_loss + loss.item()

如果在累加損失時未將其轉換為 Python 數字,則可能出現程序內存使用量增加的情況。這是因為上面表達式的右側原本是一個 Python 浮點數,而它現在是一個零維張量。因此,總損失累加了張量和它們的梯度歷史,這可能會產生很大的 autograd 圖,耗費內存和計算資源。

自適應 CPU 和 GPU設備的 trick

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = Model().to(device)

total_loss = 0
for input, target in train_loader:
 input, target = input.to(device), target.to(device)
 ...
 total_loss = total_loss + loss.item()

with torch.no_grad():
 for input, target in test_loader:
 ...

torch.Tensor.detach的使用

官方說明:Returns a new Tensor, detached from the current graph,The result will never require gradient

假設有模型 A 和模型 B,我們需要將 A 的輸出作為 B 的輸入,但訓練時我們只訓練模型 B. 那么可以這樣做:

input_B = output_A.detach

它可以使兩個計算圖的梯度傳遞斷開,從而實現我們所需的功能。

pytorch中loss函數的參數設置

以CrossEntropyLoss為例:

CrossEntropyLoss(self, weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='elementwise_mean')

若 reduce = False,那么 size_average 參數失效,直接返回向量形式的 loss,即batch中每個元素對應的loss.

若 reduce = True,那么 loss 返回的是標量:

如果 size_average = True,返回 loss.mean.

如果 size_average = False,返回 loss.sum.

weight : 輸入一個1D的權值向量,為各個類別的loss加權,如下公式所示:

ignore_index : 選擇要忽視的目標值,使其對輸入梯度不作貢獻。如果 size_average = True,那么只計算不被忽視的目標的loss的均值。

reduction : 可選的參數有:‘none' | ‘elementwise_mean' | ‘sum', 正如參數的字面意思。

多GPU的處理機制

使用多GPU時,應該記住 PyTorch 的處理邏輯是:

在各個GPU上初始化模型。

前向傳播時,把batch分配到各個GPU上進行計算。

得到的輸出在主GPU上進行匯總,計算loss并反向傳播,更新主GPU上的權值。

把主GPU上的模型復制到其它GPU上。

訓練時損失出現nan的問題

訓練模型時出現損失為 nan 的情況

可能導致梯度出現 nan 的三個原因:

梯度爆炸。也就是說梯度數值超出范圍變成 nan. 通??梢哉{小學習率、加 BN 層或者做梯度裁剪來試試看有沒有解決。

損失函數或者網絡設計。比方說,出現了除 0,或者出現一些邊界情況導致函數不可導,比方說log(0)、sqrt(0).

臟數據??梢允孪葘斎霐祿M行判斷看看是否存在 nan.

補充一下nan數據的判斷方法:

注意!像 nan 或者 inf 這樣的數值不能使用 == 或者 is 來判斷!為了安全起見統一使用 math.isnan 或者 numpy.isnan 吧。

import numpy as np
if np.any(np.isnan(input.cpu().numpy())):
 print("Input data has NaN!")
if(np.isnan(loss.item())):
 print("Loss value is NaN!")

pytorch 內存泄漏

torch.as_tensor(data, dtype=None,device=None)->Tensor : 為data生成tensor。

如果data已經是tensor,且dtype和device與參數相同,則生成的tensor會和data共享內存。如果data是ndarray,且dtype對應,devices為cpu,則同樣共享內存。其他情況則不共享內存。

import torch
import numpy
a = numpy.array([1, 2, 3])
t = torch.as_tensor(a)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 解決Pytorch中的神坑:關于model.eval的問題
  • 淺談Pytorch中autograd的若干(踩坑)總結
  • pytorch掉坑記錄:model.eval的作用說明
  • 解決Numpy與Pytorch彼此轉換時的坑

標簽:江蘇 龍巖 商丘 酒泉 金融催收 寧夏 定西 云南

巨人網絡通訊聲明:本文標題《PyTorch 編寫代碼遇到的問題及解決方案》,本文關鍵詞  PyTorch,編寫,代碼,遇到,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PyTorch 編寫代碼遇到的問題及解決方案》相關的同類信息!
  • 本頁收集關于PyTorch 編寫代碼遇到的問題及解決方案的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美嫩在线观看| 日韩美女精品在线| 欧美婷婷六月丁香综合色| 99久久精品国产一区| 成人免费视频caoporn| 成人免费电影视频| 99精品欧美一区二区蜜桃免费| 国产福利电影一区二区三区| 国产成人av电影在线播放| 国产精品夜夜爽| jizzjizzjizz欧美| 色综合色狠狠天天综合色| 欧美在线影院一区二区| 欧美精品乱码久久久久久| 91精品国产日韩91久久久久久| 欧美成人精品高清在线播放| 久久影院午夜论| 亚洲乱码日产精品bd| 日韩精品国产精品| 国产一区三区三区| 日本精品视频一区二区三区| 欧美日韩不卡一区二区| 久久亚洲二区三区| 亚洲四区在线观看| 日韩电影一区二区三区| 国产成人在线影院| 欧美日韩美女一区二区| 久久亚洲精精品中文字幕早川悠里| 国产精品传媒在线| 日韩av在线免费观看不卡| 国产精品一区久久久久| 在线一区二区三区| 欧美午夜精品一区二区三区| 欧美一区中文字幕| ...av二区三区久久精品| 亚洲图片欧美综合| 成人开心网精品视频| 91精品国产色综合久久不卡蜜臀 | 亚洲日本欧美天堂| 免费成人美女在线观看| 国内不卡的二区三区中文字幕 | 中文无字幕一区二区三区| 国产精品不卡视频| 美国十次综合导航| 91福利在线看| 亚洲国产精品高清| 麻豆精品视频在线| 91福利国产精品| 国产精品久久久久四虎| 国产一区欧美日韩| 欧美一区二区三区精品| 一区二区在线观看视频| 国产91清纯白嫩初高中在线观看 | 久久精品无码一区二区三区| 午夜视黄欧洲亚洲| 在线亚洲一区观看| 中文字幕佐山爱一区二区免费| 国产真实乱子伦精品视频| 7777精品伊人久久久大香线蕉超级流畅| 日本一区二区免费在线观看视频 | 日本vs亚洲vs韩国一区三区 | 一二三区精品视频| 91一区在线观看| 国产精品视频第一区| 国产精品资源在线看| 精品国产一二三| 麻豆精品新av中文字幕| 欧美视频一区在线| 一区二区欧美视频| 91麻豆免费观看| 亚洲人成在线观看一区二区| a级精品国产片在线观看| 欧美国产精品专区| 懂色av一区二区三区免费看| 久久亚洲免费视频| 国产精品一区二区在线观看不卡| 久久九九久久九九| 国产成人免费高清| 中文字幕精品一区| 99久久国产综合色|国产精品| 亚洲色图欧洲色图| 欧美一a一片一级一片| 天天综合日日夜夜精品| 日韩亚洲欧美高清| 337p亚洲精品色噜噜| 一区二区三区四区在线播放 | 综合久久国产九一剧情麻豆| 成人动漫一区二区| 怡红院av一区二区三区| 欧美网站大全在线观看| 美日韩一级片在线观看| 久久久久久夜精品精品免费| 成人app网站| 亚洲一二三区视频在线观看| 欧美一区二区三区系列电影| 国产在线播精品第三| 中文字幕亚洲精品在线观看| 欧美日韩精品免费| 国产美女一区二区三区| 国产精品久久99| 91精品国产91久久久久久一区二区| 久久99精品久久只有精品| 欧美国产禁国产网站cc| 精品视频1区2区| 国产在线视频一区二区三区| 亚洲欧洲中文日韩久久av乱码| 欧美日韩久久不卡| 成人深夜视频在线观看| 日韩精品免费视频人成| 国产精品国产a级| 欧美一区二区三区在线观看| 成人av动漫网站| 精品一区在线看| 亚洲综合久久久久| 国产欧美日韩卡一| 91.麻豆视频| 色综合天天做天天爱| 韩国成人精品a∨在线观看| 亚洲综合在线电影| 国产人成一区二区三区影院| 欧美老人xxxx18| 色视频欧美一区二区三区| 国模套图日韩精品一区二区| 亚洲国产wwwccc36天堂| 国产精品成人在线观看| 精品日韩一区二区三区| 在线观看国产一区二区| 国产福利一区二区三区视频在线| 午夜久久久久久久久久一区二区| 国产精品久久午夜夜伦鲁鲁| 久久免费电影网| 欧美成人a视频| 91精品免费在线观看| 色综合天天综合狠狠| 成人污污视频在线观看| 久久精品国产久精国产爱| 偷拍亚洲欧洲综合| 亚洲精品日韩一| 亚洲日本成人在线观看| 国产精品免费aⅴ片在线观看| 2024国产精品| 精品日韩在线观看| 国产宾馆实践打屁股91| 天堂va蜜桃一区二区三区漫画版| 国产精品国产三级国产普通话蜜臀| 精品久久人人做人人爽| 日韩欧美在线一区二区三区| 91麻豆精品91久久久久同性| 欧美系列一区二区| 欧美日韩一区二区三区视频| 色综合色狠狠天天综合色| 色哟哟一区二区在线观看| 91啪九色porn原创视频在线观看| 丁香婷婷综合网| 成人开心网精品视频| 99久久夜色精品国产网站| 成人国产在线观看| 91国产免费观看| 欧美日韩在线播放三区| 欧美精品丝袜中出| 欧美不卡一区二区| 国产亚洲综合在线| 国产精品美女久久久久久久久久久| 国产精品热久久久久夜色精品三区| 亚洲国产高清不卡| 亚洲欧美另类久久久精品2019| 亚洲人成人一区二区在线观看| 亚洲国产精品久久久久婷婷884 | 欧美美女bb生活片| 日韩一级大片在线| 国产欧美va欧美不卡在线| 日韩一区在线免费观看| 午夜国产不卡在线观看视频| 久久精品国产网站| 成人黄色在线看| 欧美精品三级日韩久久| 久久久亚洲精华液精华液精华液 | 日本久久一区二区三区| 欧美日韩国产成人在线免费| 久久精品亚洲麻豆av一区二区| 国产精品第一页第二页第三页| 亚洲成人激情综合网| 激情深爱一区二区| 一本一道久久a久久精品综合蜜臀| 精品视频在线免费看| 久久综合色8888| 亚洲一区二区在线免费观看视频| 免费三级欧美电影| 91视频国产观看| 精品久久人人做人人爰| 亚洲欧美日韩综合aⅴ视频| 毛片av一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 欧美一区二区精品在线| 一区二区中文视频| 久久se这里有精品| 色噜噜偷拍精品综合在线| 欧美xxxx老人做受| 午夜精品久久久久影视| av男人天堂一区|