wake-up-neo.com

Wie baut man ein 1D Convolutional Neural Network in Keras Python?

Ich löse ein Klassifizierungsproblem mit CNN. Ich habe die Datei data.csv (15000 Proben/Zeilen und 271 Spalten), wobei die erste Spalte eine Klassenbezeichnung ist (insgesamt 4 Klassen) und andere 270 Spalten Merkmale sind (6 verschiedene Signale mit einer Länge von 45 verkettet, d. H. 6X45 = 270).

Problem: Ich möchte eine einzelne Probe der Länge 270 als Vektor bereitstellen (6 x 45, alle 6 Signale haben unterschiedliche Bedeutung), aber ich erhalte einen Dimensionsfehler, wenn ich eine einzelne Probe in (6 Zeilen, 45 Spalten) umforme Faltung.
Mein CNN-Modell:

X, y = load_data()   
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
num_classes = 4

X_train = X_train.reshape(X_train.shape[0], 6, 45).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 6, 45).astype('float32') 

model = Sequential()
model.add(Conv1D(filters=32, kernel_size=5, input_shape=(6, 45)))
model.add(MaxPooling1D(pool_size=5 ))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))  

Wie man meine Daten umformt, dass CNN jede einzelne Probe als 6 Signale mit einer Länge von 45 behandelt und sich mit kernal von Fenster 5 faltet.

4
Arslan

sie müssen Ihre Daten wie Xtrain.reshape (num_of_examples, num_of_features, num_of_signals) umformen und Ihre input_shape im Modell in (45, 6) ändern. Siehe Beispielcode unten

X = np.random.randn(4000,270)
y = np.ones((4000,1))
y[0:999] = 2
y[1000:1999] = 3
y[2000:2999] = 0

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
num_classes = 4

X_train = X_train.reshape(X_train.shape[0], 45, 6).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 45, 6).astype('float32') 

model = Sequential()
model.add(Conv1D(filters=32, kernel_size=5, input_shape=(45, 6)))
model.add(MaxPooling1D(pool_size=5 ))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
1
user8190410

Der input_shape-Parameter gibt die Form jeder Eingabe "Charge" an. Für Ihr Beispiel hat es die Form: (steps, channels)steps ist die Anzahl der Beobachtungen auf jedem Kanal, channels die Anzahl der Signale. Wenn tatsächlich laufen 

model.fit(X,Y)

Die Variable X wird in der Form (batch, steps, channels) sein, wobei jeder Stapel jede Beobachtung Ihrer Daten darstellt. Verwenden Sie dazu dreidimensionale numpy-Datenrahmen. 

numpy.vstack() kann nützlich sein

0
skitzcoder