<p><strong>td;lr</strong>您需要重塑数据的形状,使其具有空间维度,以便<code>Conv1d</code>有意义:</p>
<pre><code>X = np.expand_dims(X, axis=2) # reshape (569, 30) to (569, 30, 1)
# now input can be set as
model.add(Conv1D(2,2,activation='relu',input_shape=(30, 1))
</code></pre>
<p>从本质上重塑数据集,如下所示:</p>
<pre><code>features
.8, .1, .3
.2, .4, .6
.7, .2, .1
</code></pre>
<p>致:</p>
<pre><code>[[.8
.1
.3],
[.2,
.4,
.6
],
[.3,
.6
.1]]
</code></pre>
<p><strong>说明和示例</p>
<p>通常卷积作用于空间维度。内核在维度上“卷积”产生一个张量。在Conv1D的情况下,内核被传递到每个示例的“steps”维度上。</p>
<p>您将看到在NLP中使用的Conv1D,其中<code>steps</code>是句子中的单词数(填充到某个固定的最大长度)。这些单词可能被编码为长度为4的向量。</p>
<p>下面是一个例子:</p>
<pre><code>jack .1 .3 -.52 |
is .05 .8, -.7 |<--- kernel is `convolving` along this dimension.
a .5 .31 -.2 |
boy .5 .8 -.4 \|/
</code></pre>
<p>在这种情况下,我们设置conv输入的方式是:</p>
<pre><code>maxlen = 4
input_dim = 3
model.add(Conv1D(2,2,activation='relu',input_shape=(maxlen, input_dim))
</code></pre>
<p>在您的例子中,您将把特征视为空间维度,每个特征的长度为1。(见下文)</p>
<p>下面是您的数据集中的一个示例</p>
<pre><code>att1 .04 |
att2 .05 | < -- kernel convolving along this dimension
att3 .1 | notice the features have length 1. each
att4 .5 \|/ example have these 4 featues.
</code></pre>
<p>我们将Conv1D示例设置为:</p>
<pre><code>maxlen = num_features = 4 # this would be 30 in your case
input_dim = 1 # since this is the length of _each_ feature (as shown above)
model.add(Conv1D(2,2,activation='relu',input_shape=(maxlen, input_dim))
</code></pre>
<p>正如您所看到的,您的数据集必须在(569,30,1)中重新调整
使用:</p>
<pre><code>X = np.expand_dims(X, axis=2) # reshape (569, 30, 1)
# now input can be set as
model.add(Conv1D(2,2,activation='relu',input_shape=(30, 1))
</code></pre>
<p>下面是一个可以运行的完整示例(我将使用<a href="https://keras.io/getting-started/functional-api-guide/" rel="nofollow noreferrer">Functional API</a>)</p>
<pre><code>from keras.models import Model
from keras.layers import Conv1D, Dense, MaxPool1D, Flatten, Input
import numpy as np
inp = Input(shape=(5, 1))
conv = Conv1D(filters=2, kernel_size=2)(inp)
pool = MaxPool1D(pool_size=2)(conv)
flat = Flatten()(pool)
dense = Dense(1)(flat)
model = Model(inp, dense)
model.compile(loss='mse', optimizer='adam')
print(model.summary())
# get some data
X = np.expand_dims(np.random.randn(10, 5), axis=2)
y = np.random.randn(10, 1)
# fit model
model.fit(X, y)
</code></pre>