有什么办法可以将GRU和DropBlock这两个模型结合起来?

时间:2019-06-06 21:11:41

标签: keras deep-learning

为MNIST图像分类合并两个模型DropBlock(dimesnions = 4)和CuDNNGRU(dimension = 3)。如何合并Drop Block和GRU模型的不同尺寸?

GRU主要用于文档分类,但是在这里我试图对MNIST数据集进行分类。两种型号的得分分别约为98%。我想将DropBlock和GRU模型结合在一个分类模型中。

结合DropBlock和GRU模型进行MNIST分类的代码。

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train/255.0
x_test = x_test/255.0
print(x_train.shape)
print(x_train[0].shape)

#load the model
model = Sequential()
gru = Sequential()
gru.add(CuDNNGRU(128,input_shape=(x_train.shape[1:]), 
                             return_sequences=True))
gru.add(BatchNormalization())
gru.add(CuDNNGRU(128))
gru.add(BatchNormalization())
print(gru.output_shape)
drop = Sequential()
drop.add(DropBlock2D(input_shape=(28, 28, 1), block_size=7, 
                   keep_prob=0.8, name='Input-Dropout'))
drop.add(Conv2D(filters=64, kernel_size=3, activation='relu', 
                           padding='same', name='Conv-1'))
drop.add(MaxPool2D(pool_size=2, name='Pool-1'))
drop.add(DropBlock2D(block_size=5, keep_prob=0.8, name='Dropout-1'))
drop.add(Conv2D(filters=32, kernel_size=3, activation='relu', 
padding='same', name='Conv-2'))
drop.add(MaxPool2D(pool_size=2, name='Pool-2'))
print(drop.output_shape)

model.add(merge([drop, gru], mode='concat', concat_axis=2))
print(model.output_shape)
model.add(Flatten(name='Flatten'))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
score = model.evaluate(x_test, y_test, verbose=0)

此分类模型的预期结果约为98%。

0 个答案:

没有答案