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...