亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Pytorch自己加載單通道圖片用作數據集訓練的實例

2020-02-15 21:29:36
字體:
來源:轉載
供稿:網友

pytorch 在torchvision包里面有很多的的打包好的數據集,例如minist,Imagenet-12,CIFAR10 和CIFAR100。在torchvision的dataset包里面,用的時候直接調用就行了。具體的調用格式可以去看文檔(目前好像只有英文的)。網上也有很多源代碼。

不過,當我們想利用自己制作的數據集來訓練網絡模型時,就要有自己的方法了。pytorch在torchvision.dataset包里面封裝過一個函數ImageFolder()。這個函數功能很強大,只要你直接將數據集路徑保存為例如“train/1/1.jpg ,rain/1/2.jpg …… ”就可以根據根目錄“./train”將數據集裝載了。

dataset.ImageFolder(root="datapath", transfroms.ToTensor())

但是后來我發現一個問題,就是這個函數加載出來的圖像矩陣都是三通道的,并且沒有什么參數調用可以讓其變為單通道。如果我們要用到單通道數據集(灰度圖)的話,比如自己加載Lenet-5模型的數據集,就只能自己寫numpy數組再轉為pytorch的Tensor()張量了。

接下來是我做的過程:

首先,還是要用到opencv,用灰度圖打開一張圖片,省事。

#讀取圖片 這里是灰度圖  for item in all_path:  img = cv2.imread(item[1],0)  img = cv2.resize(img,(28,28))  arr = np.asarray(img,dtype="float32")  data_x[i ,:,:,:] = arr  i+=1  data_y.append(int(item[0]))   data_x = data_x / 255 data_y = np.asarray(data_y)

其次,pytorch有自己的numpy轉Tensor函數,直接轉就行了。

 data_x = torch.from_numpy(data_x) data_y = torch.from_numpy(data_y)

下一步利用torch.util和torchvision里面的dataLoader函數,就能直接得到和torchvision.dataset里面封裝好的包相同的數據集樣本了

 dataset = dataf.TensorDataset(data_x,data_y) loader = dataf.DataLoader(dataset, batch_size=batchsize, shuffle=True)

最后就是自己建網絡設計參數訓練了,這部分和文檔以及github中的差不多,就不贅述了。

下面是整個程序的源代碼,我利用的還是上次的車標識別的數據集,一共分四類,用的是2層卷積核兩層全連接。

源代碼:

# coding=utf-8import osimport cv2import numpy as npimport random import torchimport torch.nn as nnimport torch.utils.data as dataffrom torch.autograd import Variableimport torch.nn.functional as Fimport torch.optim as optim #訓練參數cuda = Falsetrain_epoch = 20train_lr = 0.01train_momentum = 0.5batchsize = 5  #測試訓練集路徑test_path = "/home/test/"train_path = "/home/train/" #路徑數據all_path =[] def load_data(data_path): signal = os.listdir(data_path) for fsingal in signal:   filepath = data_path+fsingal  filename = os.listdir(filepath)  for fname in filename:   ffpath = filepath+"/"+fname   path = [fsingal,ffpath]   all_path.append(path)   #設立數據集多大 count = len(all_path) data_x = np.empty((count,1,28,28),dtype="float32") data_y = []#打亂順序 random.shuffle(all_path) i=0; #讀取圖片 這里是灰度圖 最后結果是i*i*i*i#分別表示:batch大小 , 通道數, 像素矩陣 for item in all_path:  img = cv2.imread(item[1],0)  img = cv2.resize(img,(28,28))  arr = np.asarray(img,dtype="float32")  data_x[i ,:,:,:] = arr  i+=1  data_y.append(int(item[0]))   data_x = data_x / 255 data_y = np.asarray(data_y)#  lener = len(all_path) data_x = torch.from_numpy(data_x) data_y = torch.from_numpy(data_y) dataset = dataf.TensorDataset(data_x,data_y)  loader = dataf.DataLoader(dataset, batch_size=batchsize, shuffle=True)   return loader#  print data_y   train_load = load_data(train_path)test_load = load_data(test_path) class L5_NET(nn.Module): def __init__(self):  super(L5_NET ,self).__init__();  #第一層輸入1,20個卷積核 每個5*5  self.conv1 = nn.Conv2d(1 , 20 , kernel_size=5)  #第二層輸入20,30個卷積核 每個5*5  self.conv2 = nn.Conv2d(20 , 30 , kernel_size=5)  #drop函數  self.conv2_drop = nn.Dropout2d()  #全鏈接層1,展開30*4*4,連接層50個神經元  self.fc1 = nn.Linear(30*4*4,50)  #全鏈接層1,50-4 ,4為最后的輸出分類  self.fc2 = nn.Linear(50,4)  #前向傳播 def forward(self,x):  #池化層1 對于第一層卷積池化,池化核2*2  x = F.relu(F.max_pool2d( self.conv1(x)  ,2 ) )  #池化層2 對于第二層卷積池化,池化核2*2  x = F.relu(F.max_pool2d( self.conv2_drop( self.conv2(x) ) , 2 ) )  #平鋪軸30*4*4個神經元  x = x.view(-1 , 30*4*4)  #全鏈接1  x = F.relu( self.fc1(x) )  #dropout鏈接  x = F.dropout(x , training= self.training)  #全鏈接w  x = self.fc2(x)  #softmax鏈接返回結果  return F.log_softmax(x) model = L5_NET()if cuda : model.cuda()   optimizer = optim.SGD(model.parameters()  , lr =train_lr , momentum = train_momentum ) #預測函數def train(epoch): model.train() for batch_idx, (data, target) in enumerate(train_load):  if cuda:   data, target = data.cuda(), target.cuda()  data, target = Variable(data), Variable(target)  #求導  optimizer.zero_grad()  #訓練模型,輸出結果  output = model(data)  #在數據集上預測loss  loss = F.nll_loss(output, target)  #反向傳播調整參數pytorch直接可以用loss  loss.backward()  #SGD刷新進步  optimizer.step()  #實時輸出  if batch_idx % 10 == 0:   print('Train Epoch: {} [{}/{} ({:.0f}%)]/tLoss: {:.6f}'.format(    epoch, batch_idx * len(data), len(train_load.dataset),    100. * batch_idx / len(train_load), loss.data[0]))#       #測試函數def test(epoch): model.eval() test_loss = 0 correct = 0 for data, target in test_load:    if cuda:   data, target = data.cuda(), target.cuda()     data, target = Variable(data, volatile=True), Variable(target)  #在測試集上預測  output = model(data)  #計算在測試集上的loss  test_loss += F.nll_loss(output, target).data[0]  #獲得預測的結果  pred = output.data.max(1)[1] # get the index of the max log-probability  #如果正確,correct+1  correct += pred.eq(target.data).cpu().sum()  #loss計算 test_loss = test_loss test_loss /= len(test_load) #輸出結果 print('/nThe {} epoch result : Average loss: {:.6f}, Accuracy: {}/{} ({:.2f}%)/n'.format(  epoch,test_loss, correct, len(test_load.dataset),  100. * correct / len(test_load.dataset))) for epoch in range(1, train_epoch+ 1): train(epoch) test(epoch)             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产网站欧美日韩免费精品在线观看| 欧美激情在线播放| 国产精品天天狠天天看| 国产精品成人久久久久| 亚洲国产日韩欧美在线动漫| 日韩一区二区久久久| 亚洲免费视频网站| 精品久久久免费| 亚洲色图国产精品| 日本午夜精品理论片a级appf发布| 91成人在线播放| 日韩在线观看网址| xx视频.9999.com| 亚洲午夜久久久久久久| 亚洲影影院av| 国产中文字幕亚洲| 日韩美女av在线免费观看| 亚洲91精品在线| 精品日韩视频在线观看| 国产午夜精品视频免费不卡69堂| 91亚洲精品一区| 日本午夜精品理论片a级appf发布| 91久久久在线| 欧美激情视频网站| 欧美大尺度电影在线观看| 伊人久久久久久久久久久久久| 欧美夫妻性视频| 一区二区三区久久精品| www.日韩欧美| 午夜精品久久久久久久99热浪潮| www.欧美精品一二三区| 亚洲一区二区免费| 亚洲色图日韩av| 亲爱的老师9免费观看全集电视剧| 性视频1819p久久| 日韩精品中文在线观看| 国产精品美乳一区二区免费| 国产在线精品成人一区二区三区| 亚洲欧美在线第一页| 亚洲区免费影片| 欧美裸体男粗大视频在线观看| 77777亚洲午夜久久多人| 亚洲在线视频福利| 欧美日韩国产成人高清视频| 久久天堂电影网| 欧美亚洲视频在线观看| 黑人极品videos精品欧美裸| 欧美一区三区三区高中清蜜桃| 国产精品亚洲激情| 亚洲国产另类 国产精品国产免费| 欧美日韩一二三四五区| 91性高湖久久久久久久久_久久99| 国产午夜精品全部视频播放| 中文字幕少妇一区二区三区| 尤物tv国产一区| 欧美日韩国产在线| 91国产在线精品| 在线视频亚洲欧美| 亚洲成av人影院在线观看| 亚洲人成网站777色婷婷| 成人黄色av网站| 日本一本a高清免费不卡| 国产婷婷成人久久av免费高清| 国产精品国语对白| 国产精品美女在线观看| 一区二区三区回区在观看免费视频| 最近2019年中文视频免费在线观看| 另类图片亚洲另类| 91久久综合亚洲鲁鲁五月天| 日韩精品免费视频| 欧美激情图片区| 亚洲毛茸茸少妇高潮呻吟| 精品日韩中文字幕| 69久久夜色精品国产7777| 亚洲字幕一区二区| 国产精品91在线观看| 亚洲免费电影一区| 亚洲电影在线观看| 伊人伊成久久人综合网站| 久久精品夜夜夜夜夜久久| 日韩**中文字幕毛片| 97视频在线免费观看| 亚洲性无码av在线| 亚洲精品视频播放| 日韩欧美视频一区二区三区| 国产有码一区二区| 久久天天躁狠狠躁老女人| 久久人人爽国产| 国产盗摄xxxx视频xxx69| 精品久久久一区二区| 91精品久久久久久久久久| 欧美日韩视频免费播放| 欧美黑人xxxx| 91av网站在线播放| 日本欧美一级片| 久久精品国产96久久久香蕉| 国产一区香蕉久久| 伦伦影院午夜日韩欧美限制| 91最新在线免费观看| 欧美激情亚洲综合一区| 欧美性xxxx在线播放| 欧美性猛交xxxx乱大交3| 日韩中文字幕欧美| 日韩av免费观影| 丝袜亚洲另类欧美重口| 亚洲少妇激情视频| 国产成人精品综合久久久| xx视频.9999.com| 亚洲jizzjizz日本少妇| 亚洲欧美日韩国产中文专区| 亚洲精品一区二三区不卡| 国产精品视频白浆免费视频| 欧美成人一区二区三区电影| 国产精品免费看久久久香蕉| 亚洲美女精品成人在线视频| 午夜精品久久久久久久99热浪潮| 午夜精品www| 97香蕉久久超级碰碰高清版| 国产一区二区日韩| 国产欧美精品xxxx另类| 欧洲日本亚洲国产区| 国产精品入口夜色视频大尺度| 国产成一区二区| 亚洲国产高清高潮精品美女| 日韩欧美中文免费| 欧美自拍大量在线观看| 欧美老少配视频| 97热在线精品视频在线观看| 国产精品va在线播放| 国产日韩欧美影视| 91高清视频免费观看| 国产亚洲视频在线| 高清一区二区三区四区五区| 日韩视频在线观看免费| 国产精品美女在线| 欧美成人黑人xx视频免费观看| 91高清视频在线免费观看| 久久全球大尺度高清视频| 日韩在线观看免费全集电视剧网站| 国产成人精品av在线| 亲爱的老师9免费观看全集电视剧| 久久视频免费观看| 欧美性感美女h网站在线观看免费| 国内外成人免费激情在线视频网站| 91九色在线视频| 日韩欧美在线字幕| 国产福利视频一区二区| 国产98色在线| 91九色精品视频| 欧美成人免费一级人片100| 亚洲成人av资源网| 国产免费一区二区三区在线观看| 亚洲iv一区二区三区| 韩国v欧美v日本v亚洲| 亚洲欧洲一区二区三区在线观看| 久久久久久网址| 色播久久人人爽人人爽人人片视av| 日韩亚洲欧美成人| 久久精品视频在线| 国产成人精品在线| 一区二区三区精品99久久| 欧美福利在线观看| 欧美xxxx做受欧美.88| 国产精品99一区|