import torch from torch import nn import torch.optim as optimizer from torch.autograd import Variable import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn import datasets import numpy as np class simpleNet(nn.Module): def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim): super(simpleNet, self).__init__() self.layer1 = nn.Sequential(nn.Linear(in_dim, n_hidden_1), nn.BatchNorm1d(n_hidden_1), nn.ReLU(True)) self.layer2 = nn.Sequential(nn.Linear(n_hidden_1, n_hidden_2), nn.BatchNorm1d(n_hidden_2), nn.ReLU(True)) self.layer3 = nn.Sequential(nn.Linear(n_hidden_2, out_dim)) def forward(self, x): x = self.layer1(x) x = self.layer2(x) x = self.layer3(x) return x digits = datasets.load_digits() plt.gray() plt.matshow(digits.images[0]) plt.show() print(digits.data.shape) print(digits.target.shape) X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3) learning_rate = 1e-2 model = simpleNet(8 * 8, 100, 50, 10) criterion = nn.CrossEntropyLoss() optimizer = optimizer.SGD(model.parameters(), lr=learning_rate) for epoch in range(2000): img = Variable(torch.Tensor(X_train).float(), volatile=True) label = Variable(torch.Tensor(y_train).long(), volatile=True) out = model(img) optimizer.zero_grad() loss = criterion(out, label) loss.backward() optimizer.step() print(loss.data) img = Variable(torch.Tensor(X_test).float(), volatile=True) out = model(img) result = [] for i in range(0, len(out.data.numpy())): result.append(np.argmax(out[i].data.numpy())) print(result) print(y_test) sum = 0 for i in range(0, len(y_test)): if result[i] == y_test[i]: sum += 1 print(sum / len(result))
基于pytorch全连接神经网络手写体数据识别,准确率达到百分之97
猜你喜欢
转载自blog.csdn.net/qq_23144435/article/details/89786929
今日推荐
周排行