基本概念
神经元和感知器模型
神经元是人脑中的神经细胞,用于处理和传递化学和电信号;
感知器就是一种对神经元运行过程的一种抽象结果。
感知器模型如下:f(x)=sign(w∗x+b)f(x)= sign(w*x+b)f(x)=sign(w∗x+b)其中,x为输入向量,sign为符号函数,括号里面大于等于0,则其值为1,括号里面小于0,则其值为-1。w为权值向量,b为偏置。求感知机模型即求模型参数w和b。感知器预测,即通过学习得到的感知机模型,对于新的输入实例给出其对应的输出类别1或者-1。
单神经元网络与全连接神经网络
单神经元网络也就是只有一个神经元的网络,也是最简单的神经网络。
全连接神经网络是具有多层感知器的的网络,也就是多层神经元的网络。层与层之间需要包括一个非线性激活函数,需要有一个对输入和输出都隐藏的层,还需要保持高度的连通性,由网络的突触权重决定。
模型训练的常用方法是反向传播(BP)算法。可以根据输出层的调整量来推导网络的突触权重的调整方式,将误差进行反向传播。
测试代码
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 图片分类
# 获取数据集
fashion_mnist = tf.keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
# 构建模型
model = tf.keras.Sequential([
# 对于每一个输入的28*28的image二维数组,降低为一维数组
tf.keras.layers.Flatten(input_shape=(28, 28)),
# 相当于有128个神经元的隐藏层,产生shape=(-1, 128)的数组
tf.keras.layers.Dense(128, activation='relu'),
# 输出层,产生shape=(-1, 10)的数组
tf.keras.layers.Dense(10)
])
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 模型训练
model.fit(train_images, train_labels, epochs=10)
# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
# 模型预测
predict_labels = model.predict(test_images)
# 结果显示
plt.figure(1, (10, 10))
for i in range(15):
plt.subplot(5, 6, i + 1)
plt.imshow(test_images[i])
plt.xticks([])
plt.yticks([])
plt.xlabel(class_names[np.argmax(predict_labels[i])])
plt.show()