最近看了一篇文章,作者在不借助任何框架的情况下搭建了一个非常简单的神经网络,感觉有点儿意思。加之自己刚刚入门深度学习,于是按照流程实现了一遍,顺便在其中回顾所学的基础知识,如有疏漏,还望指正。
这是一个单层神经网络,只有输入层和输出层,对输出结果还做了Sigmoid非线性变换。如下是展示问题的表格:
我们希望通过训练数据来训练模型,得到最后的输出结果。
import numpy as np
#定义网络结构和训练过程
class NeutralNetwork():
def __init__(self):
#利用随机数种子生成随机数,会使每次生成的初始权重相同
np.random.seed(1)
#生成了3*1的随机权重矩阵
self.synaptic_weights = 2*np.random.random((3,1))-1
#定义sigmoid激活函数
def sigmoid(self,x):
return 1/(1+np.exp(-x))
#定义sigmoid函数的导数
def sigmoid_derivative(self,x):
return x*(1-x)
#对节点的输出值进行激活
def think(self,inputs):
inputs = inputs.astype(float)
#前向传播结果
output = self.sigmoid(np.dot(inputs,self.synaptic_weights))