用户:
Fexcode查看:1 回复:2 评论:1 创建时间:2023-07-06T18:53:23
# -*- coding: utf-8 -*-
import numpy
import matplotlib.pyplot
import scipy.special
# 我的神经网络!!!
class 神经网络:
def __init__(self, 输入层, 隐藏层, 输出层, 神经网络的学习率):
"""
初始化我的神经网络
这里可以调节参数
"""
self.输入 = 输入层
self.隐藏 = 隐藏层
self.输出 = 输出层
"""
随机权重
-0.5~0.5
"""
self.wih = (
numpy.random.normal(
0.0,
pow(self.隐藏, -0.5),
(self.隐藏, self.输入)
)
)
self.who = (
numpy.random.normal(
0.0,
pow(self.输出, -0.5),
(self.输出, self.隐藏)
)
)
self.学习率 = 神经网络的学习率
self.激活函数 = lambda x: scipy.special.expit(x)
pass
def 运行(self, 输入列表, 目标列表):
"""
神经网络的核心
Parameters
----------
输入列表 : TYPE
DESCRIPTION.
目标列表 : TYPE
DESCRIPTION.
Returns
-------
None.
"""
# 注:T是
输入 = numpy.array(输入列表, ndmin=2) .T
目标 = numpy.array(目标列表, ndmin=2) .T
隐藏输入 = numpy.dot(self.wih, 输入)
隐藏输出 = self.激活函数(隐藏输入)
最终输入 = numpy.dot(self.who, 隐藏输出)
最终输出 = self.激活函数(最终输入)
"""
误差计算
"""
错误输出 = 目标-最终输出
隐藏错误 = numpy.dot(self.who.T, 错误输出)
self.who += self.学习率*numpy.dot(
(
错误输出*最终输出*(1.0-最终输出)
),
numpy.transpose(隐藏输出)
)
self.wih += self.学习率*numpy.dot(
(
隐藏错误*隐藏输出*(1.0-隐藏输出)
),
numpy.transpose(输入)
)
pass
def 查询(self, 输入列表):
"""
Parameters
----------
输入列表 : TYPE
DESCRIPTION.
Returns
-------
None..
激活函数公式:1/[1 + e^(-x)]
我不知道为什么它要叫 expit(翻译:“把它exp了”)
"""
输入 = numpy.array(输入列表, ndmin=2) .T
隐藏层输入 = numpy.dot(self.wih, 输入)
隐藏层输出 = self.激活函数(隐藏层输入)
最后输入 = numpy.dot(self.who, 隐藏层输出)
最后输出 = self.激活函数(最后输入)
return 最后输出
pass
# 文件 = open("mnist_train.csv", "r")
# 列表 = 文件.readlines()
# 文件.close()
# 所有值 = 列表[0].split(',')
# 图片数组 = numpy.asfarray(所有值[1:-2]).reshape((28, 28))
# matplotlib.pyplot.imshow(图片数组, cmap="Greys", interpolation='None')
# matplotlib.pyplot.show()