import numpy as np
import scipy.special
import matplotlib.pyplot as plt
from PIL import Image
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))
# 初始化隐层与输出层之间的权重
self.who = np.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
# 激活函数(S函数)
self.activation_function = lambda x: scipy.special.expit(x)
# 逆激活函数
self.iactivation_function = lambda y: scipy.special.logit(y)
# 设置权重
def setweights(self, wih, who):
self.wih = wih
self.who = who
# 神经网络学习训练
def train(self, inputs_list, targets_list):
# 将输入数据转化成二维矩阵
inputs = np.array(inputs_list, ndmin=2).T
# 将输入标签转化成二维矩阵
targets = np.array(targets_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
# 计算隐层误差
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.
手动搭建神经网络应用于手写数字识别
最新推荐文章于 2023-01-27 19:00:00 发布