深度學習——性別識別
import torch
import math
import torch.nn as nn
from torch.autograd import Variable
from torchvision import transforms, models
import argparse
import os
from torch.utils.data import DataLoader
from torch.utils.data import Dataset
import random
class sexnet(nn.Module):
def __init__(self):
super(sexnet, self).__init__()
self.dense = nn.Sequential(
nn.Linear(2, 2),
)
def forward(self, x):
out = self.dense(x)
return out
class SexDataset(Dataset):
def __init__(self, txt, transform=None, target_transform=None):
fh = open(txt, 'r')
data = []
for line in fh:
line = line.strip('\n')
line = line.rstrip()
words = line.split()
data.append((float(words[0]) / 2.0, float(words[1]) / 80.0, int(words[2])))
random.shuffle(data)
self.data = data
def __getitem__(self, index):
return torch.FloatTensor([self.data[index][0], self.data[index][1]]), self.data[index][2]
def __len__(self):
return len(self.data)
def train():
os.makedirs('./output', exist_ok=True)
batchsize = 10
train_data = SexDataset(txt='sex_train.txt')
val_data = SexDataset(txt='sex_val.txt')
train_loader = DataLoader(dataset=train_data, batch_size=batchsize, shuffle=True)
val_loader = DataLoader(dataset=val_data, batch_size=batchsize)
model = sexnet()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=1e-3)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, [10, 20], 0.1)
loss_func = nn.CrossEntropyLoss()
epochs = 100
for epoch in range(epochs):
# training-----------------------------------
model.train()
train_loss = 0
train_acc = 0
for batch, (batch_x, batch_y) in enumerate(train_loader):
batch_x, batch_y = Variable(batch_x), Variable(batch_y)
out = 外匯跟單gendan5.commodel(batch_x)
loss = loss_func(out, batch_y)
train_loss += loss.item()
pred = torch.max(out, 1)[1]
train_correct = (pred == batch_y).sum()
train_acc += train_correct.item()
print('epoch: %2d/%d batch %3d/%d Train Loss: %.3f, Acc: %.3f'
% (epoch + 1, epochs, batch, math.ceil(len(train_data) / batchsize),
loss.item(), train_correct.item() / len(batch_x)))
optimizer.zero_grad()
loss.backward()
optimizer.step()
scheduler.step() # 更新 learning rate
print('Train Loss: %.6f, Acc: %.3f' % (train_loss / (math.ceil(len(train_data) / batchsize)),
train_acc / (len(train_data))))
# evaluation--------------------------------
model.eval()
eval_loss = 0
eval_acc = 0
for batch_x, batch_y in val_loader:
batch_x, batch_y = Variable(batch_x), Variable(batch_y)
out = model(batch_x)
loss = loss_func(out, batch_y)
eval_loss += loss.item()
pred = torch.max(out, 1)[1]
num_correct = (pred == batch_y).sum()
eval_acc += num_correct.item()
print('Val Loss: %.6f, Acc: %.3f' % (eval_loss / (math.ceil(len(val_data) / batchsize)),
eval_acc / (len(val_data))))
# save model --------------------------------
if (epoch + 1) % 1 == 0:
torch.save(model.state_dict(), 'output/params_' + str(epoch + 1) + '.pth')
if __name__ == '__main__':
train()
print('finished')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2851767/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [OpenCV實戰]1 基於深度學習識別人臉性別和年齡OpenCV深度學習
- 基於深度學習的人臉性別識別系統(含UI介面,Python程式碼)深度學習UIPython
- 機器視覺學習筆記:臉性別識別視覺筆記
- 【Get】用深度學習識別手寫數字深度學習
- 深度學習也解決不掉語音識別問題深度學習
- 深度學習-行人重識別實戰(2020)深度學習
- keras框架下的深度學習(一)手寫體識別Keras框架深度學習
- 深度學習之目標檢測與目標識別深度學習
- 機械學習和深度學習的區別深度學習
- 機器學習和深度學習的區別機器學習深度學習
- 基於深度學習的人臉識別系統系列(Caffe+OpenCV+Dlib)——【六】設計人臉識別的識別類深度學習OpenCV
- 利用OpenCV和深度學習來實現人類活動識別OpenCV深度學習
- 深度學習行人重識別ReID最新綜述與展望深度學習
- Action Recognition——基於深度學習的動作識別綜述深度學習
- 深度學習實驗:Softmax實現手寫數字識別深度學習
- 學習身份證影象識別
- 人工智慧-深度學習-yolov3口罩佩戴識別人工智慧深度學習YOLO
- Python高效深度學習機器識別驗證碼教程分享Python深度學習
- 大資料與深度學習區別大資料深度學習
- 基於深度學習的機器人目標識別和跟蹤深度學習機器人
- C#中的深度學習(四):使用Keras.NET識別硬幣C#深度學習Keras
- 深度學習例項之基於mnist的手寫數字識別深度學習
- 深度學習--基於卷積神經網路的歌唱嗓音識別深度學習卷積神經網路
- 深度學習與機器學習之間區別 - javaworld深度學習機器學習Java
- 深度學習下的人臉識別技術:從“後真相”到“無隱私”深度學習
- 使用深度學習進行基於AI的面部識別的不同方法深度學習AI
- 實戰 | 基於深度學習模型VGG的影象識別(附程式碼)深度學習模型
- 深度學習基礎 - 基於Theano-MLP的字元識別實驗(MNIST)深度學習字元
- 【王曉剛】深度學習在影象識別中的研究進展與展望深度學習
- 人臉識別技術演進:從幾何演算法到深度學習的深度剖析演算法深度學習
- 疫情防控資訊採集難?深度學習手寫體識別來幫忙深度學習
- 「NLP-NER」命名實體識別中最常用的兩種深度學習模型深度學習模型
- 5步實現深度學習OpenCV物件檢測:Faster-RCNN圖片識別深度學習OpenCV物件ASTCNN
- 一文看懂如何將深度學習應用於視訊動作識別深度學習
- 聖誕快樂——Keras+樹莓派:用深度學習識別聖誕老人Keras樹莓派深度學習
- [譯]深度學習中所需的線性代數知識深度學習
- iOS學習筆記06 手勢識別iOS筆記
- 別樣JAVA學習(一)基礎知識Java