• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

33wood

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

手工搭建神经网络

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,'%')

 

posted on 2022-03-18 17:28  33wood  阅读(110)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3