一、人工神经网络
人工神经网络(Artificial Neural Network)是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的计算模型。经典的神经网络结构包含三个层次的神经网络:分别输入层,输出层以及隐藏层。
其中输入层是我们模型的特征,经过中间层的变化,得到最后的输入层,通过输出层内容,方便我们对问题进行决策。
隐藏层的每一个节点都是一个感知机,所谓感知机是一种最基础的分类模型,前半部分类似于回归模型。感知机最基础是这样的函数,而逻辑回归用的sigmoid。这个感知机具有连接的权重和偏置
ps:http://playground.tensorflow.org,这个网址将神经网络可视化,方便学习。
二、神经网络计算原理
人工神经网络网络的计算思路很简单,就是首先随机定义一组参数w,计算参数w和特征x的乘积,对计算的结果再加一个偏执b就行了,最后将计算到的结果进行一次归一化处理,归一化的目的就是将结果变成0-1之间,符合概率的要求。有很多的感知机的话就需要很多组参数w和偏置b。
ps:softmax就是一种归一化的函数, 其计算过程:softmax(y)i=e^yi /(ey1+ey2.......+e^yn)
以上只是我们一次正向传播的过程,这次的参数是我们随机初始化的,这一次计算的结果必然和我们真实值是没什么关系的,那么我们就需要计算预测值与真实值之间的误差然后进行反向传播,softmax作为激活函数的话,我们一般就使用交叉熵损失:
H(y) = -[y1log(Y1)+y2log(Y2)......+ynlog(Yn)],其中y表示真实值,Y表示预测值
ps:神经网络最后的损失为平均每个样本的损失大小。对所有样本的损失求和取其平均值
计算出损失之后,就可以使用梯度下降算法来对参数进行更新
反复更新多次之后,模型的参数就越来越准确了。
三、使用keras的api手动实现一个神经网络
Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产,具有以下优势:
- 方便用户使用,快速构建模型 Keras 具有针对常见用例做出优化的简单而一致的界面。
- 它可针对用户错误提供切实可行的清晰反馈。模块化和可组将可配置的构造块连接在一起就可以构建 Keras 模型,并且几乎不受限制。
Keras为我们提供了几个现有的数据集: - mnist:手写数字
- fashion_mnist:时尚分类
- cifar10(100):10个类别分类
我们使用fashion_mnist来实现一个分类的案例
定义一个自定义的类,并加载keras提供的数据集
class SingleNN(object):
"""使用keras的相关参数构造一个人工神经网络,实现对fashion_mnist数据集进行分类"""
def __init__(self):
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
self.model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax'),
])
设置好模型的参数:
def compile(self):
self.model.compile(optimizer=keras.optimizers.Adam(),
loss=losses.sparse_categorical_crossentropy,
metrics=['accuracy'])
return None
开始训练模型
def fit(self):
self.model.fit(x=self.x_train, y=self.y_train, epochs=5)
return None
保存模型
def save_model(self):
self.model.save_weights('./ckpt/SingleNN')
预测:
def predict(self):
if os.path.exists('./ckpt/SingleNN'):
self.model.load_weights('./ckpt/SingleNN')
predictions = self.model.predict(self.x_train)