【Pytorch笔记 01】深度学习模板 (未完)

一、声明

非常感谢这些资料的作者:
【参考1】【PyTorch速成教程 (by Sung Kim)】

二、工程结构

├── main.py:实现训练 (train) 、验证(validation)和测试(test)
│ ├── model.py:实现的模型
│ ├── dataset.py:加载的数据
│ ├── utils.py:常用功能

三、文件内容

main.py

from torch.utils.data import Dataset, DataLoader
from torch import from_numpy, tensor
from torch.autograd import Variable
import numpy as np
import model
import utils

# load data
dataset = MyDataset()
train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True, num_workers=2)

# model
model=Model()

# define loss and optimizer
criterion=torch.nn.BCELoss(size_average=True)
optimizer=torch.optim.SGD(model.parameters(),lr=0.1)

# train
for epoch in range(2):
    for i, data in enumerate(train_loader, 0):
        # get the inputs
        inputs, labels = data

        # wrap them in Variable
        inputs, labels = Variable(inputs), Variable(labels)
		
		# Forward pass
		y_pred=model(inputs)
		
		# Compute and print loss
		loss=criterion(y_pred,labels)
		accuracy= ultis.accuracy(y_pred,labels)
		print("[{:05d}/{:05d}] train_loss:{:.4f} accuracy: {:.4f}]".format(
				i,epoch,loss.data[0],accuracy))
		
		# update
		optimizer.zero_grad()	# zero gradients
		loss.backward()			# perform a backward pass
		optimizer.step() 		# update weight or parameters

model.py

import torch
class Model(torch.nn.Module):
	def __init__(self):
		super(Model,self).__init__()
		self.l1=torch.nn.Linear(8,6)
		self.l2=torch.nn.Linear(6,4)
		self.l3=torch.nn.Linear(4,1)
		self.sigmoid=torch.nn.Sigmoid()

	# 数据流
	def forward(self,x):
		out1=self.sigmoid(self.l1(x))
		out2=self.sigmoid(self.l2(out1))
		y_pred=self.sigmoid(self.l3(out2))
		return y_pred

dataset.py

要点:
(1)必须重载 __getitem____len__
(2)

import torch
from torch.utils.data import Dataset, DataLoader
class MyDataset(Dataset):
    def __init__(self):  # Initialize your data, download, etc.
        xy = np.loadtxt('./data/diabetes.csv.gz', delimiter=',', dtype=np.float32)
        self.len = xy.shape[0]
        self.x_data = torch.from_numpy(xy[:, 0:-1])
        self.y_data = torch.from_numpy(xy[:, [-1]])

    def __getitem__(self, index):
        return self.x_data[index], self.y_data[index]

    def __len__(self):
        return self.len

utils.py

import numpy as np
import scipy.sparse as sp
import torch
import os

def encode_onehot(labels):
    classes = set(labels)
    classes_dict = {c: np.identity(len(classes))[i, :] for i, c in
                    enumerate(classes)}
    labels_onehot = np.array(list(map(classes_dict.get, labels)),
                             dtype=np.int32)
    return labels_onehot

def accuracy(output, labels):
    preds = output.max(1)[1].type_as(labels)
    correct = preds.eq(labels).double()
    correct = correct.sum()
    return correct / len(labels)

def list_all_files(rootdir):
    _files = []

    #列出文件夹下所有的目录与文件
    list_file = os.listdir(rootdir)
    
    for i in range(0,len(list_file)):

        # 构造路径
        path = os.path.join(rootdir,list_file[i])

        # 判断路径是否是一个文件目录或者文件
        # 如果是文件目录,继续递归        
        if os.path.isdir(path):
            _files.extend(list_all_files(path))
        if os.path.isfile(path):
             _files.append(path)
    return _files

def mkdir(path):
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")
 
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)
 
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path) 
        print(path+' create sucess')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print(path+' path exist !')
        return False

四、问题汇总

:dataset.py中__getitem__返回的是一个元素,还是一个batch数据?

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
PyTorch是一种开源的深度学习框架,被广泛应用于计算机视觉领域的表情识别任务中。表情识别是一种将人脸表情分类为不同情绪类别的任务,如高兴、悲伤、惊讶等。 PyTorch为表情识别提供了强大的工具和库,使得数据准备、模型设计和训练过程更加高效和方便。首先,PyTorch提供了丰富的数据操作接口,可以方便地加载和预处理数据集,如对图像进行裁剪、缩放和标准化等。然后,PyTorch提供了各种强大的神经网络模型构建块,如卷积神经网络(CNN)、循环神经网络(RNN)和残差网络(ResNet),可以根据具体需求构建合适的模型架构。此外,PyTorch还提供了各种优化算法,如随机梯度下降(SGD)和Adam等,以优化模型的参数。最后,PyTorch提供了丰富的可视化工具,可用于可视化训练过程和模型的性能。 在表情识别中,PyTorch的主要应用是构建和训练深度神经网络模型。一般的表情识别模型包含卷积层、池化层、全连接层和Softmax层。卷积层用于提取图像的特征,池化层用于降低特征的维度,全连接层用于分类,而Softmax层则用于输出不同类别的概率。通过调整网络的参数并利用训练集进行迭代优化,可以让模型学习到不同表情的特征表示和分类决策。 总之,PyTorch是一个非常适合表情识别任务的深度学习框架。它提供了灵活且强大的工具,使得表情识别任务的数据准备、模型设计和训练过程更加高效和便捷。通过PyTorch,我们可以构建和训练出准确度较高的表情识别模型,从而在情感分析、娱乐行业、人机交互等领域获得广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲出十四行诗的幸运猴子

谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值