介绍
Fashion MNIST是一个类似于MNIST手写数字数据集的图像分类数据集,它包含10个类别的70,000张28x28像素的灰度图像。Fashion MNIST数据集的目的是为了替代MNIST数据集,因为MNIST数据集已经过于简单,不再是一个良好的图像分类数据集。Fashion MNIST数据集可以用于测试机器学习算法的性能,例如分类、图像处理等领域。
我们通过引入tf.keras.datasets.fashion_mnist来获取Fashion MNIST数据集
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
fashion_mnist = tf.keras.datasets.fashion_mnist
1-D神经网络
1-D神经网络是一种基于序列数据的神经网络模型,它的输入数据是1维的向量或时间序列。与传统的2-D卷积神经网络不同,1-D神经网络的卷积核只在一个维度上移动,通常用于处理自然语言或时间序列数据。
在本文中,我们将使用一种基于1-D卷积层和全连接层的1-D神经网络模型,它可以有效地学习图像的特征,达到分类的目的。该模型包含多个卷积层和全连接层,其中卷积层提取图像特征,全连接层用于分类。
网络的基本结构如下:
model = tf.keras.Sequential([
tf.keras.layers.Conv1D(filters=32, kernel_size=3, strides=1, padding='same', activation='relu', input_shape=(784,1)),
tf.keras.layers.MaxPool1D(pool_size=2, strides=2, padding='same'),
tf.keras.layers.Conv1D(filters=64, kernel_size=3, strides=1, padding='same', activation='relu'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(units=10, activation='softmax')
])
数据预处理
在进行训练之前,我们需要对数据集进行预处理,以便更好地训练模型。预处理的步骤如下:
1.数据集划分:将数据集划分为训练集、验证集和测试集,以便评估模型的性能。
2.数据归一化:将像素值归一化到0到1之间,可以提高模型的收敛速度和准确率。
(x_train_all, y_train_all), (x_test_all, y_test_all) = fashion_mnist.load_data()
np.random.seed(42)
indices = np.random.choice(10000, 5000, replace=False)
x_selected = x_train_all[indices]
y_selected = y_train_all[indices]
x_train, x_valid, x_test = np.split(x_selected, [3500, 4500])
y_train, y_valid, y_test = np.split(y_selected, [3500, 4500])
x_train = x_train.reshape(-1, 28,28,1) / 255.0
x_valid = x_valid.reshape(-1, 28,28,1) / 255.0
x_test = x_test.reshape(-1, 28,28,1) / 255.0
y_train = tf.keras.utils.to_categorical(y_train, num_classes=10)
y_valid = tf.keras.utils.to_categorical(y_valid, num_classes=10)
y_test = tf.keras.utils.to_categorical(y_test, num_classes=10)
神经网络模型训练
1-D神经网络模型的训练可以通过以下步骤完成:
编译模型:在编译模型之前,我们需要设置损失函数、优化器和评估指标。
训练模型:训练模型时,我们需要指定训练的batch_size、epochs等参数
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=50, validation_data=(x_valid, y_valid))
神经网络模型测试
model_1d=model.evaluate(x_test, y_test)
y_prob = model.predict(x_test)
同时可以引入confusion_matrix来绘制混淆矩阵
y_pred = np.argmax(y_prob, axis=1)
y_true = np.argmax(y_test, axis=1)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_true, y_pred)
print(cm)