深度學習——性別識別
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
- 深度學習-行人重識別實戰(2020)深度學習
- 機器視覺學習筆記:臉性別識別視覺筆記
- 【Get】用深度學習識別手寫數字深度學習
- Pytorch 手寫數字識別 深度學習基礎分享PyTorch深度學習
- keras框架下的深度學習(一)手寫體識別Keras框架深度學習
- 深度學習行人重識別ReID最新綜述與展望深度學習
- 深度學習也解決不掉語音識別問題深度學習
- 深度學習之目標檢測與目標識別深度學習
- 機械學習和深度學習的區別深度學習
- 機器學習和深度學習的區別機器學習深度學習
- 深度學習實驗:Softmax實現手寫數字識別深度學習
- Python高效深度學習機器識別驗證碼教程分享Python深度學習
- Action Recognition——基於深度學習的動作識別綜述深度學習
- 基於深度學習網路的寶石型別識別演算法matlab模擬深度學習型別演算法Matlab
- 人工智慧-深度學習-yolov3口罩佩戴識別人工智慧深度學習YOLO
- 利用OpenCV和深度學習來實現人類活動識別OpenCV深度學習
- 模式識別與機器學習——迴歸的線性模型模式機器學習模型
- 深度學習與機器學習之間區別 - javaworld深度學習機器學習Java
- 基於深度學習的機器人目標識別和跟蹤深度學習機器人
- C#中的深度學習(四):使用Keras.NET識別硬幣C#深度學習Keras
- 深度學習例項之基於mnist的手寫數字識別深度學習
- 實戰 | 基於深度學習模型VGG的影象識別(附程式碼)深度學習模型
- 深度學習下的人臉識別技術:從“後真相”到“無隱私”深度學習
- 使用深度學習進行基於AI的面部識別的不同方法深度學習AI
- 人臉識別技術演進:從幾何演算法到深度學習的深度剖析演算法深度學習
- 模式識別與機器學習(二)模式機器學習
- 【球類識別系統】影像識別Python+卷積神經網路演算法+人工智慧+深度學習+TensorFlowPython卷積神經網路演算法人工智慧深度學習
- 阿爾茨海默病症識別+影像識別Python+人工智慧+深度學習+TensorFlow+機器學習+卷積神經網路演算法Python人工智慧深度學習機器學習卷積神經網路演算法
- 【昆蟲識別系統】影像識別Python+卷積神經網路演算法+人工智慧+深度學習+機器學習+TensorFlow+ResNet50Python卷積神經網路演算法人工智慧深度學習機器學習
- 基於深度學習的手勢識別系統(Python程式碼,UI介面版)深度學習PythonUI
- 「NLP-NER」命名實體識別中最常用的兩種深度學習模型深度學習模型
- 5步實現深度學習OpenCV物件檢測:Faster-RCNN圖片識別深度學習OpenCV物件ASTCNN
- 一文看懂如何將深度學習應用於視訊動作識別深度學習
- 【機器學習】手寫數字識別機器學習
- iOS學習筆記06 手勢識別iOS筆記
- [譯]深度學習中所需的線性代數知識深度學習