Keras中的输出尺寸太大

时间:2019-12-05 22:21:35

标签: python keras neural-network

我试图在Keras中建立一个神经网络,但是这样做遇到了一个问题:网络的输出大小与我想要的输出不同,后者是一个整数。 我尝试通过添加一个将“ units”参数设置为1的Dense层来执行此操作。但是,由于输入数据的额外维度,我仍然最终得到形状为(None,13、8、1)的输出

import numpy
from keras.layers import Conv2D, Input, Dense
from keras.models import Model
from keras.optimizers import SGD


def make_training_data():
    input_training_data = []
    for i in range(6):
        a = []
        for j in range(13):
            b = []
            for k in range(8):
                c = []
                for l in range(8):
                    c.append(0)
                b.append(c)
            a.append(b)
        input_training_data.append(a)

    output_training_data = []
    for i in range(6):
        output_training_data.append(0)

    return input_training_data, output_training_data


def make_neural_net():
    input = Input((13, 8, 8))
    output = Conv2D(256, (3, 3), input_shape=(13, 8, 8), padding='same')(input)
    output = Dense(1)(output)
    return Model(outputs=output, inputs=input)


def main():
    input_training_data, output_training_data = make_training_data()
    neural_net = make_neural_net()
    input_training_data = numpy.array(input_training_data)
    output_training_data = numpy.array(output_training_data)
    sgd = SGD(0.2, 0.9)
    neural_net.compile(sgd, 'categorical_crossentropy', metrics=['accuracy'])
    neural_net.fit(input_training_data, output_training_data, epochs=1)


main()

如何更改网络,以便获得正确的输出大小?

1 个答案:

答案 0 :(得分:3)

在将卷积层转换为一维张量之前,需要展平张量。

替换:

output = Dense(1)(output)

具有:

output = Flatten()(output)
output = Dense(1)(output)`

keras.layers.Flatten导入

此外,由于您有1个输出神经元,因此您需要将激活功能更改为'sparse_categorical_crossentropy'