Многогранная модель в Keras - ошибка при объединении - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь реализовать многоголовую модель с переменным количеством входов одномерных данных, каждый из которых имеет длину sps.

Итак, я определяю вход в цикле, который позже объединяется в одну модель.И получаю ошибку

dense = (Dense(locChannels, activation=locActivation, input_shape=merged.output_shape)) (merged)

AttributeError: у объекта 'Tensor' нет атрибута 'output_shape'

Если я удаляю параметр input_shape из плотного объекта, который я получаюследующее:

UserWarning: входные данные модели должны поступать из keras.layers.Input (таким образом, удерживая метаданные прошлого слоя), они не могут быть выходными данными предыдущего не входного слоя.Здесь тензор, указанный в качестве входного для вашей модели, не был входным тензором, он был сгенерирован слоем flatten_1.Обратите внимание, что входные тензоры создаются с помощью tensor = keras.layers.Input(shape).

У вас есть идея, как это исправить?

Думаю, мне следует уточнить, как выглядят мои данные.Может быть, у меня есть ошибка в моей структуре.

locChannels - это количество различных функций, которые у меня есть.Каждая функция является 1D и содержит точные образцы SPS.Требуемый вывод - массив с горячим кодом.

differentModels = list()

for index in range (0,locChannels):
    name = 'Input_'+str(index)
    visible = Input(shape=(sps,1), name=name)
    cnn1 = Conv1D(filters=8,kernel_size=2, activation=locActivation) (visible)
    cnn1 = MaxPooling1D(pool_size = 2) (cnn1)
    cnn1 = Flatten()(cnn1)
    #print(visible)
    differentModels.append(cnn1)

merged = Concatenate()(differentModels)
dense = (Dense(locChannels, activation=locActivation, input_shape=merged.output_shape)) (merged)

for index in range (2,locLayers):
    dense = (Dropout(rate=locDropoutRate)) (dense)
    dense = (Dense(locChannels, activation=locActivation, input_shape=(locChannels,))) (dense)
output = Dense(units=locClasses, activation='softmax')(dense)

model = Model(inputs=differentModels, outputs= output)

1 Ответ

0 голосов
/ 27 сентября 2018

Я только что узнал, в чем была моя ошибка.В строке

model = Model(inputs=differentModels, outputs= output)

Ввод должен быть заголовком или входным слоем, а не последним.Таким образом, следующее работает как ожидалось:

inputheads = list()
myinputs = list()

for index in range(0,features):
    input_a = Input(shape=(sps,1),name='Input_'+str(index))
    cnn1 = Conv1D(filters=8,kernel_size=2, activation='selu') (input_a)
    cnn1 = MaxPooling1D(pool_size = 2) (cnn1)
    cnn1 = Flatten()(cnn1)
    inputheads.append(cnn1)
    myinputs.append(input_a)

merged = Concatenate() (inputheads)
dense = Dense(20)(merged)
predictions = Dense(10, activation='softmax')(dense)
model = Model(inputs=myinputs, outputs=predictions)
...