首页 > 解决方案 > 在神经网络中使用卷积层

问题描述

我正在尝试在 Keras 上的神经网络中使用 Conv1D 层作为输入层,我理解它是一个时间卷积层。我的理解是它接受输入,并使用内核大小(具有一组特征)来创建一个新的卷积层。我的训练数据是一个长度为 231 的长热编码张量。我很难理解 Conv1D 层的输入是如何/什么?

x_train.shape([1])的是231。

当我使用:

n_cols = x_train.shape([1])

model.add(Conv1D(128, 11, activation = 'relu', input_shape = (n_cols,)))

(我使用 11 是因为据我了解,我相信它一次从我的一个热向量中获取 11 个值)

我收到错误消息:

ValueError: Input 0 of layer conv1d is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 231]

完整追溯:

Traceback (most recent call last):
  File "/Volumes/Hajar's     HDD/MSc_data/large_proteins/ml_network.py", line 18, in <module>
        model.add(Conv1D(128, 11, activation = 'relu', input_shape     = (n_cols,)))
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/training/tracking/base.py", line 456, in     _method_wrapper
    result = method(self, *args, **kwargs)
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/keras/engine/sequential.py", line 169, in     add
    layer(x)
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/keras/engine/base_layer.py", line 589, in     __call__
    self.name)
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/keras/engine/input_spec.py", line 124, in     assert_input_compatibility
    str(x.shape.as_list()))

我试图改变内核大小,但我仍然得到同样的错误。我想也许我之前需要另一个输入层。对于内核大小,这是特征数,即 231?

标签: tensorflowmachine-learningkeras

解决方案


您将需要输入shape=(231, x )其中 x 是第二维的位置。您可以尝试使用x = 1like :

import numpy as np

n_cols = x_train.shape([1])
x_train = np.reshape( x_train , ( -1 , n_cols , 1 )  )

model.add(Conv1D(128, 11, activation = 'relu', input_shape = (n_cols,1)))

Conv1D需要形式为(batch_size, a, b )whereab是非零维度的二维输入。


推荐阅读