在学习中学会总结是进步的一个阶梯,不断的克服每个小问题,才有可能发现并解决一个大问题,在学习pytorch中记录自己的成果让更多人受益,这是是开源精神的精髓所在。
下面是我记录一套使用pytorch框架,若有误请指出。
# 详情参考:https://www.jianshu.com/p/e606f8fc1626
GPU加速
dropout
批标准化处理
优化器
激活函数
import torch
import torch.nn.functional as F
import torch.nn as nn
import torch.utils.data as Data
#定义参数
BATCH_SIZE = 64 # 在Data中
EPOCHS = 50 # 迭代次数
LR = 0.05 # 学习率
OUTPUT = 0.5 # dropout百分比
######################构建torch神经网络######################
# 1.获取数据
数据库 / excel
# 2.处理数据
数据的异常值,缺失值,数据转换等特征工程
最终获取:train_x,train_y test_x,test_y
# 3.利用Data处理数据 固定模板
train_dataset = Data.TensorDataset(train_x, train_y)
train_loader = Data.DataLoader(dataset=train_dataset,
batch_size=BATCH_SIZE,
shuffle=True,
num_workers=2,)
# 4.构建神经网络模型 这部分是核心部分
class Net(nn.Module):
def __init__(self, batch_normalization=False):
super(Net, self).__init__()
pass
def forward(self, x):
pass
# 5.构建优化函数和损失函数
net = Net()
opts = torch.optim.Adam(net.parameters(), lr=LR) # 这里的LR是定义的学习率
loss_func = torch.nn.MSELoss() # 这只是一种损失函数
# 6.训练
for epoch in range(EPOCHS): # 迭代次数EPOCHS
for step, (batch_x, batch_y) in enumerate(train_loader): # 分批次训练
pred= net(batch_x) # 训练模型
# 下面是固定模板
loss = loss_func(pred, batch_y) # 计算损失值
opts.zero_grad() # 清除这次训练的梯度 (因为梯度是累加的)
loss_func.backward() # 计算梯度
opts.step() #应用梯度
# 7.模型预测
# 预测test_x数据对应的前10
test_output = net(test_x[:10])
pred_y = torch.max(test_output, 1)[1].data.numpy()
print(pred_y, 'prediction number')
print(test_y[:10].numpy(), 'real number')
# 8.1 模型的保存和加载--保存完整的神经网络
torch.save(net, 'net.pkl')
net = torch.load('net.pkl')
# 8.2 模型的保存和加载--只保存神经网络参数,使用的时候需要加载模型的框架
torch.save(net.state_dict(), 'net_params.pkl')
net = Net() # 模型框架
net.load_state_dict(torch.load('net_params.pkl'))