日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第四章 使用张量表征真实数据(1)

發(fā)布時(shí)間:2024/3/24 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四章 使用张量表征真实数据(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近高產(chǎn)似那啥~

話不多說(shuō),直接開(kāi)始

本書(shū)第一部分的代碼和一些用到的數(shù)據(jù):

鏈接(阿里云盤(pán)):

「Pytorch DeepLearning」https://www.aliyundrive.com/s/wQmXYZSqyv4 點(diǎn)擊鏈接保存,或者復(fù)制本段內(nèi)容,打開(kāi)「阿里云盤(pán)」APP ,無(wú)需下載極速在線查看,視頻原畫(huà)倍速播放。

本章主要內(nèi)容

1.將真實(shí)數(shù)據(jù)表示為Pytorch張量。

2.處理一系列數(shù)據(jù)類型。

3.從文件加載數(shù)據(jù)。

4.將數(shù)據(jù)轉(zhuǎn)換為張量。

5.塑造張量,使之作為神經(jīng)網(wǎng)絡(luò)的輸入。

本文先介紹一部分。截止葡萄酒品質(zhì)鑒定那里。

4.1 處理圖像

1.加載圖像文件

###4.1.2 加載圖像文件 import imageio import torch img_arr = imageio.imread('D:\\DeepLearning data\\data\\p1ch4\\image-dog\\bobby.jpg') print(img_arr) print(img_arr.shape)

輸出:

2.改變布局

###4.1.3 改變布局 img = torch.from_numpy(img_arr) out = img.permute(2,0,1)#permute()函數(shù)對(duì)通道進(jìn)行重排CxHxW—>HxWxC print(out)

###預(yù)先分配一個(gè)適當(dāng)大小的張量,并使用從目錄中加載的圖像填充它 batch_size = 3 batch = torch.zeros(batch_size, 3, 256, 256, dtype=torch.uint8) ####(3,3,256,256)張量 import os data_dir = 'D:\\DeepLearning data\\data\\p1ch4\\image-cats' filenames = [name for name in os.listdir(data_dir) ####os.listdir()返回指定路徑下的文件和文件夾列表if os.path.splitext(name)[-1]=='.png'] ####僅挑選.png文件 os.path.splitext() 分離文件名與擴(kuò)展名 for i ,filename in enumerate(filenames):img_arr = imageio.imread(os.path.join(data_dir,filename)) ####os.path.join()用于路徑拼接文件路徑;只是起到連接文件的作用,而不能生成文件img_t = torch.from_numpy(img_arr)img_t = img_t.permute(2, 0, 1)img_t = img_t[:3]batch[i] = img_t print(batch)

?輸出:

3.正規(guī)化數(shù)據(jù)

batch = batch.float() batch /= 255.0 ###將數(shù)據(jù)歸一到[0,1] print(batch)

###另一種方法(0均值,1標(biāo)準(zhǔn)差) ###預(yù)先分配一個(gè)適當(dāng)大小的張量,并使用從目錄中加載的圖像填充它 batch_size = 3 batch = torch.zeros(batch_size, 3, 256, 256, dtype=torch.uint8) ####(3,3,256,256)張量 import os data_dir = 'D:\\DeepLearning data\\data\\p1ch4\\image-cats' filenames = [name for name in os.listdir(data_dir) ####os.listdir()返回指定路徑下的文件和文件夾列表if os.path.splitext(name)[-1]=='.png'] ####僅挑選.png文件 os.path.splitext() 分離文件名與擴(kuò)展名 for i ,filename in enumerate(filenames):img_arr = imageio.imread(os.path.join(data_dir,filename)) ####os.path.join()用于路徑拼接文件路徑;只是起到連接文件的作用,而不能生成文件img_t = torch.from_numpy(img_arr)img_t = img_t.permute(2, 0, 1) ###pytorch需要張量排列(CxHxW)轉(zhuǎn)變?yōu)?#xff08;3,256,256)img_t = img_t[:3]batch[i] = img_t print(batch) batch = batch.float() print(batch.shape) n_channels = batch.shape[1] for c in range(n_channels):###只保留前三個(gè)通道m(xù)ean = torch.mean(batch[:,c])std = torch.std(batch[:,c])batch[:,c] = (batch[:,c] - mean)/std print(batch) print(batch.shape)

?輸出:

4.2 三維圖像:體數(shù)據(jù)

#4.2 三維圖像:體數(shù)據(jù) ###加載特定格式 使用imageio模塊中的volread()函數(shù)加載一個(gè)CT掃描樣本,該函數(shù)將目錄作為參數(shù) import imageio dir_path = 'D:\\DeepLearning data\\data\\p1ch4\\volumetric-dicom\\2-LUNG 3.0 B70f-04083' vol_arr = imageio.volread(dir_path,'DICOM') print(vol_arr.shape) #####shape(99,512,512)不包含通道信息,因此需要使用unsqueeze()函數(shù)為通道維數(shù)留出空間 vol = torch.from_numpy(vol_arr).float() vol = torch.unsqueeze(vol,0)##對(duì)數(shù)據(jù)維度進(jìn)行擴(kuò)充。給指定位置加上維數(shù)為一的維度 print(vol.shape)

?輸出:

?4.3 表示表格數(shù)據(jù)

Pytorch提供了幾種加載csv文件的方法,最常用的三種是:Python自帶的CSV模塊、numpy、pandas.

本次使用numpy

1.讀取數(shù)據(jù)

###葡萄酒評(píng)分 import csv import numpy as np wine_path = 'D:\\DeepLearning data\\data\\p1ch4\\tabular-wine\\winequality-white.csv' wine_numpy = np.loadtxt(wine_path, dtype=np.float32, delimiter=";",skiprows=1) ###skiprows=1表示不讀第一行,因?yàn)槠渲邪忻?print(wine_numpy) wine_tensor = torch.from_numpy(wine_numpy) print(wine_tensor.shape,wine_tensor.dtype)

輸出:

###表示分?jǐn)?shù) data = wine_tensor[:,:-1]###最后一列是分?jǐn)?shù),不輸入模型 print(data,data.shape) target = wine_tensor[:,-1].long()###轉(zhuǎn)換為標(biāo)簽張量 print(target,target.shape)

?輸出:

2.獨(dú)熱編碼

使用scatter_()方法獲得獨(dú)熱編碼,該方法將沿著參數(shù)提供的索引方向?qū)⒃磸埩康闹堤畛溥M(jìn)輸入張量中

scatter_()? 下劃線表示該方法不會(huì)返回一個(gè)新的張量,而是在適當(dāng)?shù)奈恢眯薷脑瓘埩?br /> scatter_(input, dim, index, src) → Tensor
將src中的所有值按照index確定的索引寫(xiě)入本tensor中。其中索引是根據(jù)給定的dimension,dim按照gather()描述的規(guī)則來(lái)確定。
參數(shù):- input (Tensor)-源tensor
????? -dim (int)-索引的軸向
????? -index (LongTensor)-散射元素的索引指數(shù)
????? -src (Tensor or float)-散射的源元素

###獨(dú)熱編碼 ###使用scatter_()方法獲得獨(dú)熱編碼,該方法將沿著參數(shù)提供的索引方向?qū)⒃磸埩康闹堤畛溥M(jìn)輸入張量中 target_onehot = torch.zeros(target.shape[0],10) target_onehot.scatter_(1, target.unsqueeze(1), 1.0) print(target_onehot,target_onehot.shape) ''' scatter_() 下劃線表示該方法不會(huì)返回一個(gè)新的張量,而是在適當(dāng)?shù)奈恢眯薷脑瓘埩?scatter_(input, dim, index, src) → Tensor 將src中的所有值按照index確定的索引寫(xiě)入本tensor中。其中索引是根據(jù)給定的dimension,dim按照gather()描述的規(guī)則來(lái)確定。 參數(shù):- input (Tensor)-源tensor -dim (int)-索引的軸向 -index (LongTensor)-散射元素的索引指數(shù) -src (Tensor or float)-散射的源元素 參數(shù): 指定表示要散射的元素的索引張量;'''

輸出:

?另一種獨(dú)熱編碼方式:

##感覺(jué)有點(diǎn)難理解,決定使用另一種方法 import torch.nn.functional as F target_onehot1 = F.one_hot(target) print(target_onehot1,target_onehot1.shape)

輸出:

結(jié)果一樣~

3.處理數(shù)據(jù)

''' dim=0為第0個(gè)維度,代表行。對(duì)于torch.mean(s,dim=0),表示跨行求平均。 ''' ###處理張量表格數(shù)據(jù) data_mean = torch.mean(data, dim=0) print(data_mean,data_mean.shape) data_var = torch.var(data, dim=0) print(data_var,data_var.shape) data_normalized = (data - data_mean)/torch.sqrt(data_var) print(data_normalized,data_normalized.shape)

輸出:

????

###尋找閾值 尋求一種簡(jiǎn)單方法快速分辨酒的好壞 例如分?jǐn)?shù)小于等于3的即為劣質(zhì)酒 bad_indexes = target <= 3 print(bad_indexes,bad_indexes.shape,bad_indexes.dtype,bad_indexes.sum())###布爾型數(shù)據(jù) bad_data = data[bad_indexes] print(bad_data,bad_data.shape)

?輸出:

###分為好中劣三等 bad_data = data[target <= 3] mid_data = data[(target > 3) & (target < 7)] good_data = data[target >= 7] ###對(duì)每一列取均值 bad_mean = torch.mean(bad_data,dim=0) mid_mean = torch.mean(mid_data,dim=0) good_mean = torch.mean(good_data,dim=0) for i, args in enumerate(zip(col_list,bad_mean,mid_mean,good_mean)):print('{:2} {:20} {:6.2f} {:6.2f} {:6.2f}'.format(i,*args))

###使用二氧化硫總量的閾值來(lái)區(qū)分酒的好劣 total_sulfur_threshold = 141.83 total_sulfur_data = data[:,6] predicted_indexes = torch.lt(total_sulfur_data,total_sulfur_threshold)##torch.lt(input,other)逐元素比較input和other即是否 input<other;返回bool型 print(predicted_indexes,predicted_indexes.dtype,predicted_indexes.shape,predicted_indexes.sum())

輸出:

###得到真正好酒的索引 actual_indexes = target > 5 print(actual_indexes.shape,actual_indexes.dtype,actual_indexes.sum(),actual_indexes)

輸出:

###檢驗(yàn)預(yù)測(cè)與實(shí)際結(jié)果是否相符 n_matches = torch.sum(actual_indexes & predicted_indexes).item()###。item()方法 將數(shù)組元素復(fù)制到標(biāo)準(zhǔn)Python標(biāo)量并返回它。 n_predicted = torch.sum(predicted_indexes).item() n_actual = torch.sum(actual_indexes).item() print(f'預(yù)測(cè)得到的優(yōu)質(zhì)酒數(shù)量:',n_matches) print(f'2700瓶中的預(yù)測(cè)準(zhǔn)確率:',n_matches/n_predicted) print(f'整個(gè)數(shù)據(jù)集中的預(yù)測(cè)準(zhǔn)確率:',n_matches/n_actual)

?輸出:

OK,先寫(xiě)到這,太多了也沒(méi)人看(反正也沒(méi)人看) 記得看完點(diǎn)個(gè)贊~(磕頭辣)

所需的文件還在整理,最后附上鏈接,或者私信我獲取~

總結(jié)

以上是生活随笔為你收集整理的第四章 使用张量表征真实数据(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。