training_data = torchvision.datasets.mnist(
root = ‘./mnist/’,
train = true,
transform = torchvision.transforms.totensor(),
download = downloads
)
#convert training data to numpy
train_data = training_data.train_data.numpy()[:train_amount]
train_label = training_data.train_labels.numpy()[:train_amount]
print training data size
print('training data size: ',train_data.shape)
print(‘training data label size:’,train_label.shape)
plt.imshow(train_data[0])
plt.show()
train_data = train_data/255.0
return train_data, train_label
#%% load the test data
def mnist_dataset_test(downloads, test_amount):
load dataset
testing_data = torchvision.datasets.mnist(
root = ‘./mnist/’,
train = false,
transform = torchvision.transforms.totensor(),
download = downloads
)
convert testing data to numpy
test_data = testing_data.test_data.numpy()[:test_amount]
test_label = testing_data.test_labels.numpy()[:test_amount]
print training data size
print('test data size: ',test_data.shape)
print(‘test data label size:’,test_label.shape)
plt.imshow(test_data[0])
plt.show()
test_data = test_data/255.0
return test_data, test_label
#%% main function for mnist dataset
if name==‘main’:
training arguments settings
parser = argparse.argumentparser(description=‘saak’)
parser.add_argument(‘–download_mnist’, default=true, metavar=‘dl’,
help=‘download mnist (default: true)’)
parser.add_argument(‘–train_amount’, type=int, default=60000,
help=‘amount of training samples’)
parser.add_argument(‘–test_amount’, type=int, default=2000,
help=‘amount of testing samples’)
args = parser.parse_args()
print arguments
print(‘\n----------argument values-----------’)
for name, value in vars(args).items():
print(‘%s: %s’ % (str(name), str(value)))
print(‘------------------------------------\n’)
load training data & testing data
train_data, train_label = mnist_dataset_train(args.download_mnist, args.train_amount)
test_data, test_label = mnist_dataset_test(args.download_mnist, args.test_amount)
training_features = train_data.reshape(args.train_amount,-1)
test_features = test_data.reshape(args.test_amount,-1)
training svm
print(‘------training and testing svm------’)
clf = svm.svc(c=5, gamma=0.05,max_iter=10)
clf.fit(training_features, train_label)
#test on test data
test_result = clf.predict(test_features)
precision = sum(test_result == test_label)/test_label.shape[0]
print('test precision: ', precision)
#test on training data
train_result = clf.predict(training_features)
precision = sum(train_result == train_label)/train_label.shape[0]
print('training precision: ', precision)
#show the confusion matrix
matrix = confusion_matrix(test_label, test_result)
2.cnn实现
library
standard library
import os
third-party library
import torch
import torch.nn as nn
import torch.utils.data as data
import torchvision
import matplotlib.pyplot as plt
plt.rc(“font”, family=‘kaiti’)
import matplotlib.pyplot as plt
torch.manual_seed(1) # reproducible
hyper parameters
epoch = 1 # train the training data n times, to save time, we just train 1 epoch
batch_size = 50
lr = 0.001 # learning rate
download_mnist = false
mnist digits dataset
if not(os.path.exists(‘./mnist/’)) or not os.listdir(‘./mnist/’):
<
发表评论