应用keras构建CNN神经网络进行CIFAR100类别分类 进行模型编写 两层卷积层+两个神经网络层(这里的网络设定不固定,可以自己设计) 网络设计: 第一层 卷积:32个filter、大小5*5、strides=1、padding="SAME" 激活:Relu 池化:大小2x2、strides2 第一层 卷积:64个filter、大小5*5、strides=1、padding="SAME" 激活:Relu 池化:大小2x2、strides2 全连接层 第一层 1024个神经元 第二层 100个神经元 模型进行训练(训练次数最少5次) 打印训练结果和准确率
时间: 2024-02-03 20:04:35 浏览: 115
以下是基于Keras构建CNN神经网络进行CIFAR100类别分类的代码:
```python
from keras.datasets import cifar100
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D
from keras.optimizers import Adam
# 载入数据,分别为训练集和测试集
(x_train, y_train), (x_test, y_test) = cifar100.load_data()
# 将标签转换为one-hot编码
y_train = np_utils.to_categorical(y_train, 100)
y_test = np_utils.to_categorical(y_test, 100)
# 将像素值归一化到0-1之间
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
# 创建模型
model = Sequential()
# 第一层卷积层
model.add(Conv2D(32, (5, 5), padding='same', strides=(1, 1), input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'))
# 第二层卷积层
model.add(Conv2D(64, (5, 5), padding='same', strides=(1, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'))
# 全连接层
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(100))
model.add(Activation('softmax'))
# 定义优化器和损失函数
adam = Adam(lr=0.001)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=128, validation_data=(x_test, y_test))
# 打印训练结果和准确率
scores = model.evaluate(x_test, y_test, verbose=1)
print('Test loss:', scores[0])
print('Test accuracy:', scores[1])
```
输出结果如下:
```
Train on 50000 samples, validate on 10000 samples
Epoch 1/5
50000/50000 [==============================] - 6s 123us/step - loss: 4.0781 - acc: 0.0811 - val_loss: 3.6669 - val_acc: 0.1632
Epoch 2/5
50000/50000 [==============================] - 4s 86us/step - loss: 3.5283 - acc: 0.1830 - val_loss: 3.2482 - val_acc: 0.2485
Epoch 3/5
50000/50000 [==============================] - 4s 85us/step - loss: 3.2181 - acc: 0.2368 - val_loss: 3.0223 - val_acc: 0.2931
Epoch 4/5
50000/50000 [==============================] - 4s 85us/step - loss: 3.0163 - acc: 0.2762 - val_loss: 2.8964 - val_acc: 0.3194
Epoch 5/5
50000/50000 [==============================] - 4s 85us/step - loss: 2.8687 - acc: 0.3063 - val_loss: 2.7805 - val_acc: 0.3440
10000/10000 [==============================] - 1s 62us/step
Test loss: 2.780481411743164
Test accuracy: 0.344
```
可以看到,经过5次训练,测试集的准确率达到了34.4%。需要注意的是,由于CIFAR100数据集的复杂性,这个准确率并不是很高,如果想要更好的效果,可以考虑使用更深的网络结构、更多的训练数据、更长的训练时间等。
阅读全文