簡體   English   中英

如何在 keras python 中構建一維卷積神經網絡?

[英]How to build 1D Convolutional Neural Network in keras python?

我正在使用 CNN 解決分類問題。 我有 data.csv 文件(15000 個樣本/行和 271 列),其中第一列是類標簽(共 4 個類),其他 270 列是特征(6 個不同的長度為 45 的信號串聯,即 6X45=270)。

問題:我想提供長度為 270 的單個樣本作為向量(6 X 45,所有 6 個信號都有不同的含義),但是在卷積中將單個樣本重新整形為(6 行,45 列)時,我在維度上出現錯誤。
我的CNN模型:

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'))  

如何重塑我的數據,CNN 將每個樣本視為 6 個長度為 45 的信號並與窗口 5 的核卷積。

您需要重塑您的數據,例如

X_train.reshape(num_of_examples, num_of_features, num_of_signals)

並將模型中的input_shape更改為(45, 6) 請參閱下面的示例代碼,

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'))

input_shape參數指定每個輸入“批次”的形狀。 對於您的示例,它具有以下形式:( (steps, channels) steps是每個通道上的觀察數, channels是信號的數量。 實際運行時

model.fit(X,Y)

X的形式為(batch, steps, channels) ,每個批次都是對數據的每次觀察。 為此使用 3 維numpy數據框。

numpy.vstack()可能會派上用場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM