td; lr vous avez besoin pour vous remodeler les données pour avoir une spatiale dimension pour Conv1d
sens:
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))
Essentiellement, le remodelage d'un ensemble de données qui ressemble à ceci:
features
.8, .1, .3
.2, .4, .6
.7, .2, .1
Pour:
[[.8
.1
.3],
[.2,
.4,
.6
],
[.3,
.6
.1]]
Explications et exemples
Normalement convolution travaille sur les dimensions de l'espace. Le noyau est "convolé" par rapport à la dimension la production d'un tenseur. Dans le cas de Conv1D, le noyau est passé de plus les "étapes" de la dimension de chaque exemple.
Vous verrez Conv1D utilisé pour en PNL où l' steps
est le nombre de mots dans la phrase (rembourré pour certains fixe de longueur maximale). Les mots ne peuvent être codés comme des vecteurs de longueur 4.
Voici un exemple de phrase:
jack .1 .3 -.52 |
is .05 .8, -.7 |<--- kernel is `convolving` along this dimension.
a .5 .31 -.2 |
boy .5 .8 -.4 \|/
Et la façon dont nous définissez l'entrée de la conv dans ce cas:
maxlen = 4
input_dim = 3
model.add(Conv1D(2,2,activation='relu',input_shape=(maxlen, input_dim))
Dans votre cas, il vous permettra de traiter les caractéristiques de l'espace de dimension avec chaque entité ayant une longueur de 1. (voir ci-dessous)
Ici, serait un exemple à partir de votre jeu de données
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.
Et nous donnerait la Conv1D exemple que:
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))
Comme vous le voyez votre jeu de données doit être remodelé à (569, 30, 1)
utilisation:
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))
Ici est un véritable exemple de ce que vous pouvez exécuter (je vais utiliser l' API Fonctionnelle)
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)