import torch
from common.utils_fashion_mnist import load_data_fashion_mnist
from common.utils import evaluate_accuracy
from common.utils_layers import FlattenLayer

batch_size = 256
num_inputs, num_hidden1, num_hidden2, num_outputs = 784, 256, 256, 10
drop_prob1, drop_prob2 = 0.2, 0.5

train_iter, test_iter = load_data_fashion_mnist(batch_size)

# 定义网络结构
net = torch.nn.Sequential(FlattenLayer(),
                          torch.nn.Linear(num_inputs, num_hidden1),
                          torch.nn.ReLU(), torch.nn.Dropout(drop_prob1),
                          torch.nn.Linear(num_hidden1, num_hidden2),
                          torch.nn.ReLU(), torch.nn.Dropout(drop_prob2),
                          torch.nn.Linear(num_hidden2, num_outputs))

# 初始化参数
for param in net.parameters():
    torch.nn.init.normal_(param, mean=0, std=0.01)

# 定义优化器
optimizer = torch.optim.SGD(net.parameters(), lr=0.5)

# 定义损失函数
loss = torch.nn.CrossEntropyLoss()

# 训练模型
epochs = 5
Exemplo n.º 2
0
import torch
import numpy as np
from common.utils_fashion_mnist import load_data_fashion_mnist
from common.utils import relu, softmax, cross_entropy, sgd, evaluate_accuracy

# 部分超参数
batch_size = 256
num_inputs = 784
num_outputs = 10
num_hidden = 256

# 读取数据
train_iter, test_iter = load_data_fashion_mnist(256)

# 初始化参数
W1 = torch.tensor(np.random.normal(size=(num_inputs, num_hidden),
                                   loc=0.0,
                                   scale=0.01),
                  dtype=torch.float,
                  requires_grad=True)
b1 = torch.zeros(num_hidden, dtype=torch.float, requires_grad=True)
W2 = torch.tensor(np.random.normal(size=(num_hidden, num_outputs),
                                   loc=0.0,
                                   scale=0.01),
                  dtype=torch.float,
                  requires_grad=True)
b2 = torch.zeros(num_outputs, dtype=torch.float, requires_grad=True)
params = [W1, b1, W2, b2]


# 定义网络结构