Последовательность одномерной свертки в кератах - PullRequest
0 голосов
/ 29 мая 2018

Я нуб, пытающийся построить сеть, чтобы классифицировать 2 последовательности чисел с одним из 16450 различных целых чисел.У меня 70408 сэмплов, и я добавил для каждого сэмпла 1400 значений.Таким образом, 1 образец имеет 2 вектора столбцов, например.[104,243,120,12 ...], [125,25,14,556 ...].Оба моих x_train это размер (70408,1400).Я пытаюсь использовать функциональный API-интерфейс keras, но не могу определить правильную форму ввода.Буду признателен за любую помощь.

samples = 70408
mass_size = 1400
intensity_size = 1400
output_size = 16450

mass_input = Input(shape=(samples,mass_size), dtype='float32')
mass_net = layers.Conv1D(32,5,activation='relu')(mass_input)
mass_net = layers.AveragePooling1D(3)(mass_net)
mass_net = layers.Conv1D(16,5,activation='relu')(mass_net)
mass_net = layers.GlobalAveragePooling1D()(mass_net)

intensity_input = Input(shape=(samples,intensity_size), dtype='float32')
intensity_net = layers.Conv1D(32,5,activation='relu')(intensity_input)
intensity_net = layers.AveragePooling1D(3)(intensity_net)
intensity_net = layers.Conv1D(16,5,activation='relu')(intensity_net)
intensity_net = layers.GlobalAveragePooling1D()(intensity_net)

concatenated = layers.concatenate([mass_net,intensity_net],axis=-1)

output = layers.Dense(output_size,activation='softmax')(concatenated)


print(mass_data.shape, intensity_data.shape)
model = Model([mass_data,intensity_data],output)
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['acc'])

model.fit([mass_data,intensity_data],y_train,epochs=10,batch_size=128)

Ошибка, которую я продолжаю получать:

TypeError                                 Traceback (most recent call last)
<ipython-input-18-aab93c439dd0> in <module>()
     28 
     29 print(mass_data.shape, intensity_data.shape)
---> 30 model = Model([mass_data,intensity_data],output)
     31 model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['acc'])
     32 

~\Anaconda3\envs\deeplearning\lib\site-packages\keras\legacy\interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `' + object_name +
     90                               '` call to the Keras 2 API: ' + signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

~\Anaconda3\envs\deeplearning\lib\site-packages\keras\engine\topology.py in __init__(self, inputs, outputs, name)
   1528 
   1529         # Check for redundancy in inputs.
-> 1530         if len(set(self.inputs)) != len(self.inputs):
   1531             raise ValueError('The list of inputs passed to the model '
   1532                              'is redundant. '

TypeError: unhashable type: 'numpy.ndarray'

1 Ответ

0 голосов
/ 29 мая 2018

Проблема, кажется, здесь:

model = Model([mass_data,intensity_data],output)

Вы должны использовать созданные вами тензоры ввода, а не просто данные:

model = Model([mass_input, intensity_input],output)

Другая проблема, связанная с моимстарый комментарий это input_shape.

Поскольку теперь у вас есть данные (образцы, длина, характеристики), вам нужно input_shape=(length,features)

...