踩坑 SVHN資料集transforms不起作用

2021-10-21 21:01:02 字數 2022 閱讀 1410

train_dataset = svhn(

'./data'

, split=

'train'

, download=

true

, transform=transforms.compose(

[ transforms.resize(28)

, transforms.grayscale(num_output_channels=1)

, transforms.totensor(),

transforms.normalize(

(0.5,)

,(0.5,))

]))

但是當你輸出train_dataset.data.shape的時候,結果是(3,32,32),它還是三通道的資料,而且尺寸還是32*32,我明明給它做了transform資料轉換,怎麼就死活不對呢!!!但是在封裝為dataloader後就對了,可是封裝之後我就不好對資料進行操作了啊,我要在封裝之前進行處理,所以到底是為什麼啊!!!

搞了好幾天,終於找到毛病出在**了:torchvision.transforms處理只能處理pil型別的資料,所以要麼用pil.image讀取,要麼將ndarray資料轉成pil型別

pil和numpy相互轉換方式如下:

from pil import image

#pil image轉成numpy

np_img = np.asarray(pil_img)

#引數時pil型別的

或 np_img = np.array(pil_img)

#將array準成pil image

image.fromarray(np.uint8(np_img)

)

但是直接用image.fromarray(np.uint8(train_dataset.data))轉換會報錯:typeerror: cannot handle this data type: (1, 1, 28, 3), |u1

因為image.fromarray只能對單個進行操作,好的,我變成單個:image.fromarray(np.uint8(train_dataset.data[0])),又tm報錯:typeerror: cannot handle this data type: (1, 1, 28), |u1,又是為啥啊,我哭了,在網上搜了一圈也沒找到答案,然後我從可以轉換成功的**入手,終於發現問題了,太難了也

pil需要的格式是(w,h,c),而svhn資料集的格式是(c,w,h)

所以又要進行轉換了,把(c,w,h)變為(w,h,c):

img.transpose(1,

2,0)

最後,終於從np array變成了pil格式,

transform=transforms.compose(

[ transforms.resize(28)

, transforms.grayscale(num_output_channels=1)

, transforms.totensor(),

transforms.normalize(

(0.5,)

,(0.5,))

])for i in

range

(len

(train_dataset.labels)):

tmp = train_dataset.data[i]

# 3,32,32 (c,w,h)

trans_img = tmp.transpose(1,

2,0)

# 32,32,3 (w,h,c)

pil_img = image.fromarray(trans_img.astype(

'uint8'))

tf_img = transform(pil_img)

終於搞定了!

Mysql資料庫踩坑集

sql檔案執行異常資訊 specified key was too long max key length is 767 bytes 意思 超出索引位元組的限制,不是指字段長度限制。如果啟用了系統變數innodb large prefix 預設啟用,注意實驗版本為mysql 5.6.41,預設是關閉...

JSP jQuery踩坑錯誤錦集

最近完成的專案是傳統的mvc專案,前端頁面主要採用jsp jquery完成,而且沒有開發環境,踩坑頗為多,且除錯麻煩。本著讓以後能更高效 bu na me ku bi 的完成工作,來總結一下自己的踩坑錦集,希望對仍然採用該專案結構的小夥伴有所幫助,後續如果繼續寫jsp,會一直補充。好了,不廢話,先說...

如何處理svhn資料集的mat檔案

碰到的問題 參考文件 mat格式的檔案是matlab的資料儲存標準格式。根據網上的教程,我首先用scipy庫處理mat檔案 import scipy.io as scio data scio.loadmat r d datasets svt train digitstruct.mat data.ke...