使用ResNet结构的神经网络进行Fashion-MNIST图像分类
这段代码实现了一个使用ResNet结构的神经网络对Fashion-MNIST数据集进行图像分类的任务。具体来说,代码包括以下部分:
-
导入所需的库和模块,包括Keras、NumPy、datetime等。
-
加载Fashion-MNIST数据集,并对数据进行预处理,包括归一化和转换为one-hot编码。
-
定义ResNet结构的函数,包括卷积层、残差块等。
-
使用定义的函数构建ResNet神经网络模型,并编译模型,设置优化器、损失函数和评估指标。
-
使用训练集进行模型训练,并在测试集上进行评估。
-
输出最终的损失值和准确率。
import datetime
from keras.utils import to_categorical
from keras.datasets import fashion_mnist
import numpy as np
from keras.layers import Input,Conv2D,AveragePooling2D,BatchNormalization,Activation,Add,Flatten,Dense,Dropout
from keras.models import Model
def conv(channels,strides=1,kernel_size=(3,3),padding='same'):
return Conv2D(filters=channels,kernel_size=kernel_size,strides=strides,padding=padding,use_bias=False)
def res_block(inputs,base_channels):
#跳跃部分
residual = inputs
residual = BatchNormalization()(residual)
residual = Activation('relu')(residual)
residual = conv(channels=base_channels,kernel_size=(1,1))(residual)
#直连部分
x = conv(channels=base_channels,kernel_size=(1,1))(inputs)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = conv(channels=base_channels,kernel_size=(1,1))(x)
outputs = Add()([x,residual])
return Activation('relu')(outputs)
def ResNet(input_shape,base_channels,classes):
inputs = Input(shape=input_shape)
x = conv(channels=base_channels,strides=2,kernel_size=(3,3))(inputs)
x = res_block(x,base_channels=base_channels)
x = res_block(x,base_channels=base_channels*2)
x = res_block(x,base_channels=base_channels*2)
x = res_block(x,base_channels=base_channels*4)
x = AveragePooling2D()(x)
x = Flatten()(x)
x = Dense(512,activation='relu')(x)
outputs = Dense(classes,activation='softmax')(x)
model = Model(inputs=inputs,outputs=outputs)
return model
(x_train,y_train),(x_test,y_test) = fashion_mnist.load_data()
x_train,x_test = x_train.astype(np.float32)/255.,x_test.astype(np.float32)/255.
x_train,x_test = np.expand_dims(x_train,axis=3),np.expand_dims(x_test,axis=3)
y_train_one = to_categorical(y_train,10)
y_test_one = to_categorical(y_test,10)
num_classes = 10
batch_size = 32
epochs = 30
learning_rate = 0.001
input_shape = (28,28,1)
model = ResNet(input_shape,base_channels=16,classes=10)
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
model.fit(x_train,y_train_one,
batch_size=batch_size,
epochs=epochs,
validation_data=(x_test,y_test_one),
verbose=1)
#评估
scores = model.evaluate(x_test,y_test_one,batch_size=batch_size,verbose=1)
print("最后损失值以及准确率",scores)
原文地址: https://www.cveoy.top/t/topic/or2p 著作权归作者所有。请勿转载和采集!