自调整CNN网络

数据挖掘 神经网络 分类 喀拉斯 卷积神经网络
2022-03-04 06:02:00

我目前正在尝试构建一个自我调整网络,这样给定任意数量的输入,应该始终提供形状 (15,145) 的输出

网络结构非常简单,如下所示:

    inputs = 36
    list_of_input = [Input(shape = (45,5,3)) for i in range(inputs)]
    list_of_conv_output = []
    list_of_max_out = []
    for i in range(splits):
        list_of_conv_output.append(Conv2D(filters = 145 , kernel_size = (30,3))(list_of_input[i]))
        list_of_max_out.append((MaxPooling2D(pool_size=(3,2))(list_of_conv_output[i])))

    merge = keras.layers.concatenate(list_of_max_out)
    #reshape = Reshape((merge.shape[0],merge.shape[3]))(merge)

    dense1 = Dense(units = 1000, activation = 'relu',    name = "dense_1")(merge)
    dense2 = Dense(units = 1000, activation = 'relu',    name = "dense_2")(dense1)
    dense3 = Dense(units = 145 , activation = 'softmax', name = "dense_3")(dense2)



    model = Model(inputs = list_of_input , outputs = dense3)
    model.compile(loss="sparse_categorical_crossentropy", optimizer="adam")

    print model.summary()

    raw_input("SDasd")
    hist_current = model.fit(x = [train_input[i] for i in range(100)],
                        y = labels_train_data,
                        shuffle=False,
                        validation_data=([test_input[i] for i in range(10)], labels_test_data),
                        validation_split=0.1,
                        epochs=150000,
                        batch_size = 15,
                        verbose=1)

它被调整为具有 36 个输入,这将使它的输出形状为 (15,1,145) - 但是我如何确定过滤器的数量、内核大小和池大小,这将给我所需的输出大小。该网络应该用于分类,长度为 15 的输出向量在第一轴(45 = 15 * 3)中的每三个条目都有类。类的总数是 145,因此输出维度 (15,145)

1个回答

空间金字塔池化层(https://arxiv.org/pdf/1406.4729.pdf)应该可以为您解决这个问题。例如,这些层允许您使用任何尺寸的输入图像,而不是仅限于 224x224 图像。