手工搭建神经网络
y=x1**2+x2**2:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1/(1+np.exp(-x))
data_tr = pd.read_csv('E:/学习/python/文档1.txt')
data_te = pd.read_csv('E:/学习/python/文档2.txt')
n = len(data_tr)
yita = 0.85
out_in = np.array([0.0, 0, 0, 0, -1])
w_mid = np.zeros([3,4])
w_out = np.zeros([5])
delta_w_out = np.zeros([5])
delta_w_mid = np.zeros([3,4])
Err = []
for j in range(1000):
error = []
for it in range(n):
net_in = np.array([data_tr.iloc[it, 0], data_tr.iloc[it, 1], -1])
real = data_tr.iloc[it, 2]
for i in range(4):
out_in[i] = sigmoid(sum(net_in * w_mid[:, i]))
res = sigmoid(sum(out_in * w_out))
error.append(abs(real-res))
#print(it, '个样本的模型输出:', res, 'real:', real)
delta_w_out = yita*res*(1-res)*(real-res)*out_in
delta_w_out[4] = -yita*res*(1-res)*(real-res)
w_out = w_out + delta_w_out #
for i in range(4):
delta_w_mid[:, i] = yita*out_in[i]*(1-out_in[i])*w_out[i]*res*(1-res)*(real-res)*net_in
delta_w_mid[2, i] = -yita*out_in[i]*(1-out_in[i])*w_out[i]*res*(1-res)*(real-res)
w_mid = w_mid + delta_w_mid
Err.append(np.mean(error))
print('矩阵:\n',w_mid,'\n\n',w_out)
error_te = []
a=9
for it in range(len(data_te)):
net_in = np.array([data_te.iloc[it, 0], data_te.iloc[it, 1], -1])
real = data_te.iloc[it, 2]
for i in range(4):
out_in[i] = sigmoid(sum(net_in * w_mid[:, i]))
res = sigmoid(sum(out_in * w_out))
print('y',a,':',res)
a=a+1

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1/(1+np.exp(-x))
data_tr = pd.read_csv('C:/Users/25074/Documents/WeChat Files/wxid_jomb9ver281c22/FileStorage/File/2022-03/3.3 data_tr.txt')
data_te = pd.read_csv('C:/Users/25074/Documents/WeChat Files/wxid_jomb9ver281c22/FileStorage/File/2022-03/3.3 data_te.txt')
n = len(data_tr)
yita = 0.85
out_in = np.array([0.0, 0, 0, 0, -1])
w_mid = np.zeros([3,4])
w_out = np.zeros([5])
delta_w_out = np.zeros([5])
delta_w_mid = np.zeros([3,4])
Err = []
for j in range(1000):
error = []
for it in range(n):
net_in = np.array([data_tr.iloc[it, 0], data_tr.iloc[it, 1], -1])
real = data_tr.iloc[it, 2]
for i in range(4):
out_in[i] = sigmoid(sum(net_in * w_mid[:, i]))
res = sigmoid(sum(out_in * w_out))
error.append(abs(real-res))
print(it, '个样本的模型输出:', res, 'real:', real)
delta_w_out = yita*res*(1-res)*(real-res)*out_in
delta_w_out[4] = -yita*res*(1-res)*(real-res)
w_out = w_out + delta_w_out
for i in range(4):
delta_w_mid[:, i] = yita*out_in[i]*(1-out_in[i])*w_out[i]*res*(1-res)*(real-res)*net_in
delta_w_mid[2, i] = -yita*out_in[i]*(1-out_in[i])*w_out[i]*res*(1-res)*(real-res)
w_mid = w_mid + delta_w_mid
Err.append(np.mean(error))
print('矩阵:\n',w_mid,'\n\n',w_out)
plt.plot(Err)
plt.show()
plt.close()
error_te = []
for it in range(len(data_te)):
net_in = np.array([data_te.iloc[it, 0], data_te.iloc[it, 1], -1])
real = data_te.iloc[it, 2]
for i in range(4):
out_in[i] = sigmoid(sum(net_in * w_mid[:, i]))
res = sigmoid(sum(out_in * w_out))
error_te.append(abs(real-res))
plt.plot(error_te)
plt.show()
np.mean(error_te)



import numpy as np
import scipy.special
import pylab
import matplotlib.pyplot as plt
class NeuralNetwork():
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
self.lr = learningrate
self.wih = np.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes)) #(mu,sigma,矩阵)
self.who = np.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
self.activation_function = lambda x: scipy.special.expit(x)
pass
print("************Train start******************")
def train(self,input_list,target_list):
inputs = np.array(input_list, ndmin=2).T
targets = np.array(target_list,ndmin= 2).T
hidden_inputs = np.dot(self.wih, inputs)
hidden_outputs = self.activation_function(hidden_inputs)
final_inputs = np.dot(self.who, hidden_outputs)
final_outputs = self.activation_function(final_inputs)
output_errors = targets - final_outputs
#print("*****************************")
#print("output_errors:",output_errors)
hidden_errors = np.dot(self.who.T,output_errors)
self.who += self.lr * np.dot((output_errors*final_outputs*(1.0-final_outputs)),
np.transpose(hidden_outputs))
self.wih += self.lr * np.dot((hidden_errors*hidden_outputs*(1.0-hidden_outputs)),
np.transpose(inputs))
pass
def query(self, input_list):
inputs = np.array(input_list, ndmin=2).T
hidden_inputs = np.dot(self.wih, inputs)
hidden_outputs = self.activation_function(hidden_inputs)
final_inputs = np.dot(self.who, hidden_outputs)
final_outputs = self.activation_function(final_inputs)
return final_outputs
input_nodes = 784
hidden_nodes = 100
output_nodes = 10
learning_rate = 0.3
n = NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
training_data_file = open(r"E:/学习/python/人工智能 从小白到大神PPT\mnist_train.csv",'r')
training_data_list = training_data_file.readlines()
print("training_data_list:",training_data_list)
training_data_file.close()
i = 2
for e in range(i):
for record in training_data_list:
all_values = record.split(',')
inputs = (np.asfarray(all_values[1:])/255.0 * 0.99) + 0.01
targets = np.zeros(output_nodes) + 0.01
targets[int(all_values[0])] = 0.99#all_values[0]=='8'
n.train(inputs,targets)
pass
pass
test_data_file = open(r"E:/学习/python/人工智能 从小白到大神PPT\mnist_test.csv",'r')
test_data_list = test_data_file.readlines()
test_data_file.close()
all_values = test_data_list[2].split(',')
print(all_values)
print(len(all_values))
print(all_values[0])
score = []
print("***************Test start!**********************")
for record in test_data_list:
all_values = record.split(',')
correct_values = int(all_values[0])
print(correct_values,"是正确的期望值")
inputs = (np.asfarray(all_values[1:])/255.0 * 0.99) + 0.01
outputs= n.query(inputs)#10行一列的矩阵
label = np.argmax(outputs)
print(label,"是网络的输出值\n")
if(label == correct_values):
score.append(1)
else:
score.append(0)
pass
pass
print(outputs)
print(score)
score_array = np.asfarray(score)
print("正确率是:",(score_array.sum()/score_array.size)*100,'%')

浙公网安备 33010602011771号