【问题标题】:1D convolution sequence in keraskeras 中的一维卷积序列
【发布时间】:2018-05-29 01:33:57
【问题描述】:

我是一个菜鸟,试图建立一个网络来将 2 个浮点序列分类为 16450 个不同整数之一。我有 70408 个样本,我已经填充了每个样本以获得 1400 个值。所以 1 个样本有 2 个列向量,例如。 [104.243,120.12...],[125.25,14.556...]。我的 x_train 都是大小(70408,1400)。我正在尝试使用 keras 的功能 API,但似乎无法找出正确的输入形状。任何帮助将不胜感激。

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'

【问题讨论】:

  • 一维卷积需要 3D 数据。 (samples, length, channelsOrFeatures).
  • 我已经成功地将我的输入重新调整为 (samples,length,features) 但我仍然得到完全相同的错误。我的序列是行向量还是列向量有关系吗?

标签: functional-programming keras convolution


【解决方案1】:

问题似乎出在这里:

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

您应该使用您创建的输入张量,而不是 numpy 数据:

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

另一个与我的旧评论相关的问题是input_shape

由于您现在将数据作为(样本、长度、特征),您需要input_shape=(length,features)

【讨论】:

  • 谢谢丹尼尔!!
  • :D -- 如果您认为这回答了您的问题,请将其标记为已回答。
  • 如果我使用函数模型而不是顺序模型是不是很浪费。我想我可以通过将大小为 (70408,1400,2) 的数据合并在一起来使用 1 Conv1D
  • 没问题....但这可能取决于预期的结果。但这是一个悬而未决的问题。您也可以通过连接输入数据仅使用一个输入。
猜你喜欢
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 2017-12-20
相关资源
最近更新 更多