我在尝试在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?
回答:
你需要一个形状为shape=(231, x )
的输入,其中x是第二维度。你可以尝试使用x = 1
,如以下代码所示:
import numpy as npn_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 )
的二维输入,其中a
和b
是非零维度。