functional-programming - keras 中的一维卷积序列
问题描述
我是一个试图建立一个网络来将 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'
解决方案
问题似乎在这里:
model = Model([mass_data,intensity_data],output)
您应该使用您创建的输入张量,而不是 numpy 数据:
model = Model([mass_input, intensity_input],output)
与我的旧评论相关的另一个问题是input_shape
.
由于您现在将数据作为(样本、长度、特征),您需要input_shape=(length,features)
推荐阅读
- newrelic - 尽管从 New Relic 仪表板中可以看到服务器,但 REST API 未返回任何服务器
- ios - 使用通用可编码 API 客户端处理非 JSON 响应
- javascript - 如果索引大于使用 v-for 循环在 VUEJS 中的值,我如何显示(+10 多个)
- pycharm - PyCharm 的 Markdown 渲染很漂亮。有没有办法将它按原样保存到 pdf 或 html 文件中?
- string - 在golang中替换字符串中的一个字符
- uno-platform - 无法覆盖 OnApplyTemplate
- docker - Dockerfile COPY 不适用于 cloud-build
- excel - Range.Value = "" 类型不匹配
- netty - 春季webflux | 无限期保持连接
- apollo - 仅当所有服务都可用时如何启动 apollo federation server