import numpy
import scipy.special
class NeuralNetWork:
def __init__(self,inputnodes,hiddennodes,outputnodes,learningRate):
self.input_nodes = inputnodes
self.hidde_nodes = hiddennodes
self.output_nodes = outputnodes
self.lr=learningRate
self.wih=numpy.random.rand(self.hidde_nodes,self.input_nodes)-0.5
self.who=numpy.random.rand(self.output_nodes,self.hidde_nodes)-0.5
def fit(self,input_list,targets_list):
inputs=numpy.array(input_list,ndmin=2).T
targets=numpy.array(targets_list,ndmin=2).T
hidden_inputs=numpy.dot(self.wih,inputs)
sigmoid=lambda x:scipy.special.expit(x)
hidden_outputs=sigmoid(hidden_inputs)
final_inputs=numpy.dot(self.who,hidden_outputs)
final_outputs=sigmoid(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-final_outputs)),numpy.transpose(hidden_outputs))
self.wih += self.lr*numpy.dot((hidden_errors*hidden_outputs*(1-hidden_outputs)),numpy.transpose(inputs))
def evaluate(self,inputs):
hidden_inputs=numpy.dot(self.wih,inputs)
sigmoid=lambda x:scipy.special.expit(x)
hidden_outputs=sigmoid(hidden_inputs)
final_inputs=numpy.dot(self.who,hidden_outputs)
final_outputs=sigmoid(final_inputs)
print(final_outputs)
pass
from keras.datasets import mnist
(train_images,train_labels),(test_images,test_labels)=mnist.load_data()
from keras.utils import to_categorical
train_images=train_images.reshape((60000,28*28))
train_images = train_images.astype('float32')/255
test_images=test_images.reshape((10000,28*28))
test_images = test_images.astype('float32')/255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
input_nodes=28*28
hidden_nodes=100
output_nodes=10
learning_rate=0.3
n=NeuralNetWork(input_nodes,hidden_nodes,output_nodes,learning_rate)
i=0
for train_image,train_label in zip(train_images,train_labels):
n.fit(train_images,train_labels)
print(i)
i=i+1
#n.evaluate([1.0,0.5,-1.5])
scores=[]
for test_image,test_label in zip(test_images,test_labels):
output = n.evaluate(test_image)
evalueate_label=numpy.argmax(output)
correct_label=numpy.argmax(test_label)
if evalueate_label==correct_label:
scores.append(1)
else:
scores.append(0)
scores_array=numpy.asarray(scores)
print("performance = ",scores_array.sum()/scores_array.size)
一个简单的网络,训练较慢
最新推荐文章于 2022-07-08 22:16:08 发布