--------------------------------------------------MAIN--------------------------------------------------------
from xiuwenapi import *
import matplotlib.pyplot as plt
import pylab
input_nodes = 784#输入数据个数
hidden_nodes = 200#
output_nodes = 10
learning_rate = 0.2
n = neuralnetwork(input_nodes,hidden_nodes,output_nodes,learning_rate)
#-------------------------------训练阶段↓
traning_data_file = open("E:\\MNIST\\MNIST_CSV格式\\mnist_train.csv",'r')
traning_data_list = traning_data_file.readlines()#读入CVS数据
traning_data_file.close()
epochs = 1
for x in range(epochs):
for record in traning_data_list:
all_values = record.split(',')
inputs = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01#缩小范围
targets = numpy.zeros(output_nodes) + 0.01
targets[int(all_values[0])] = 0.99
n.train(inputs,targets)
pass
print(x)
pass
#-------------------------------训练阶段↑
#torch.save(n, "E:\\MNIST\\MNIST_CSV格式\\pzwj.pkl")
#----------------------------------测试阶段↓
print("train OVER\r\n ");
test_data_file = open("E:\\MNIST\\MNIST_CSV格式\\mnist_test.csv", 'r')
test_data_list = test_data_file.readlines()
test_data_file.close()
scorecard = []
for record in test_data_list:
all_values = record.split(',')
correct_label = int(all_values[0])
inputs = (numpy.asfarray(all_values[1:])/255.0*0.99)+0.01
outputs = n.query(inputs)
label = numpy.argmax(outputs)
if (label==correct_label):
scorecard.append(1)
else:
scorecard.append(0)
pass
pass
#----------------------------------测试阶段↑
scorecard_array = numpy.asarray(scorecard)
print("performance=",scorecard_array.sum()/scorecard_array.size)
print("test OVER\r\n ");
-------------------------------------------------------------------API---------------------------------------------------------------------
#第一炮 2019_9_25
import numpy
import scipy.special
class qz:
global wih
global who
pass
class neuralnetwork:
def __init__(self, inputnodes, hiddennodes,outputnodes,learningrate):
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
self.lr = learningrate#学习率
self.wih = numpy.random.normal( 0.0 , pow( self.hnodes , -0.5 ),( self.hnodes , self.inodes ) )#正态分布的权重
self.who = numpy.random.normal( 0.0 , pow( self.onodes , -0.5 ),( self.onodes , self.hnodes ) )#+1
self.activation_function = lambda x:scipy.special.expit(x)#s函数
def train(self,inputs_list,targets_list):
inputs = numpy.array(inputs_list,ndmin = 2).T
targets = numpy.array(targets_list,ndmin = 2).T
hidden_inputs = numpy.dot(self.wih,inputs)
hidden_outputs = self.activation_function(hidden_inputs)
final_inputs = numpy.dot(self.who,hidden_outputs)
final_outputs = self.activation_function(final_inputs)
output_errors = targets - final_outputs
hidden_errors = numpy.dot(self.who.T,output_errors)
self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)),numpy.transpose(hidden_outputs))
self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)),numpy.transpose(inputs))
qz.who = self.who
qz.wih = self.wih
def query(self,inputs_list):
inputs = numpy.array( inputs_list , ndmin=2 ).T
hidden_inputs = numpy.dot( self.wih,inputs )#权重与输入点乘
hidden_outputs = self.activation_function(hidden_inputs)#阶跃函数
final_inputs = numpy.dot( self.who, hidden_outputs)#权重与中间层点乘
final_outputs = self.activation_function( final_inputs )#阶跃函数
return final_outputs