尝试先训练几个独立的网络,预测的时候再组合到一起:
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential,Model
from keras.layers import Input,Conv2D,Dense,Dropout,Convolution2D,MaxPooling2D,Flatten,SeparableConv2D,concatenate
from keras.optimizers import Adam
from keras import optimizers,regularizers
import tensorflow as tf
from keras.utils import multi_gpu_model
from keras.callbacks import LearningRateScheduler, TensorBoard, ModelCheckpoint
import time
(x_train,y_train),(x_test,y_test) = mnist.load_data()
x_train = x_train.reshape(-1,28,28,1)/255.0
x_test = x_test.reshape(-1,28,28,1)/255.0
from keras.models import load_model
model = load_model('Net14.h5')
#model.summary()
loss,accuracy = model.evaluate(x_test,y_test)
#print('test loss',loss)
print('test accuracy',accuracy)
model2 = load_model('Net16.h5')
#model2.summary()
loss,accuracy = model2.evaluate(x_test,y_test)
#print('test loss2',loss)
print('test accuracy2',accuracy)
test1 = model.predict(x_test,batch_size=2000, verbose=1)
test2 = model2.predict(x_test,batch_size=2000, verbose=1)
test1 = test1+test2
acc = 0
for i in range(test1.shape[0]):
c = np.argmax(test1[i])
if (c==y_test[i]) :
acc = acc+1
acc = acc/test1.shape[0]
print('acc=',acc)
下面网络都是重新训练的,所以acc和上一篇记录的略有差异
网络 | acc |
---|---|
Net3 | 0.9921 |
Net3_2 | 0.9921 |
Net4 | 0.9883 |
Net4_2 | 0.9888 |
Net14 | 0.9764 |
Net14_2 | 0.971 |
Net16 | 0.982 |
Net14+16 | 0.9839 |
Net14+14_2 | 0.9797 |
Net14+14_2+16 | 0.9852 |
Net14+4 | 0.9872 |
Net4+4_2 | 0.9891 |
Net3+4 | 0.9923 |
结论:
1、差不多准确率的网络结果组合能提高准确率
2、准确率相差较大的网络结果组合反而降低准确率