今天我們要試試看,Fusion對正確率的影響。
我們使用Colab來當作我們的實作平台,並使用Keras來完成。
fashion_mnist,為Keras內建的資料集
訓練集為60,000 張28x28 像素灰度圖像,測試集為10,000 同規格圖像,總共10 類時尚物品標籤。該數據集可以用作MNIST 的直接替代品。類別標籤是:
類別 描述 中文
0 T-shirt/top T卹/上衣
1 Trouser 褲子
2 Pullover 套頭衫
3 Dress 連衣裙
4 Coat 外套
5 Sandal 涼鞋
6 Shirt 襯衫
7 Sneaker 運動鞋
8 Bag 背包
9 Ankle boot 短靴
我們使用12層當作基準。與之前不同的是我們在model的尾端不使用Dense層。
def model_12layer():
#12層
input_shape=(28,28,1)
input = Input(input_shape)
layer=Conv2D(32, kernel_size=(2, 2), activation='relu', padding='same')(input)
layer=BatchNormalization()(layer)
for i in range(2):
layer=Conv2D(32, kernel_size=(2, 2), activation='relu',padding='same')(layer)
layer=BatchNormalization()(layer)
layer=MaxPooling2D(pool_size=(2, 2))(layer)
for i in range(3):
layer=Conv2D(64, kernel_size=(2, 2), activation='relu',padding='same')(layer)
layer=BatchNormalization()(layer)
layer=MaxPooling2D(pool_size=(2, 2))(layer)
for i in range(3):
layer=Conv2D(128, kernel_size=(2, 2), activation='relu',padding='same')(layer)
layer=BatchNormalization()(layer)
layer=MaxPooling2D(pool_size=(2, 2))(layer)
for i in range(3):
layer=Conv2D(256, kernel_size=(2, 2), activation='relu',padding='same')(layer)
layer=BatchNormalization()(layer)
layer=MaxPooling2D(pool_size=(2, 2))(layer)
layer = Dropout(0.5)(layer)
output = Flatten()(layer)
model = Model(inputs=[input], outputs=[output])
model.compile(loss='sparse_categorical_crossentropy',optimizer=keras.optimizers.Adam(lr=0.0001,decay=1e-6),metrics = ['accuracy'])
return model
可以看到Fusion其實就是把model連接起來。Dense層我們會在連接起來後再使用,這樣可以使特徵數量更多。
| 層數 | 12層 | 3個Fusion |5個Fusion|7個5個Fusion|9個Fusion|
| -------- | -------- | -------- |-|-|-|-|
|正確率 | 88.63% |89.44%|88.70%|89.75%|89.98%|
投票的正確率:
層數 | 12層 | 3個投票 | 5個投票 | 7個投票 | 9個投票 | 15個投票 |
---|---|---|---|---|---|---|
正確率 | 88.63% | 90.48% | 91.41% | 91.61% | 91.75% | 91.89% |
在我們測試的情況中,Fusion也可以提升正確率,但是提升的幅度沒有單純的Voting好。