简体   繁体   中英

How to add convolutional layer to Keras model?

There is data that contains A, B, C. C value should be predicted from A and B values.

在此处输入图像描述

The data was split and scaled.

在此处输入图像描述

Model without convolutional layer.

from keras.models import Sequential
from keras.layers import Dense, Conv1D

features_count = len(X_train.columns)

model = Sequential([
    Dense(64, input_shape=(features_count,)),
    Activation('relu'),
    Dense(32),
    Activation('softmax'),
    Dense(1),
])

model.compile(optimizer="adam", loss='mse')
model.fit(X_train.values, y_train.values, epochs=10, batch_size=1, verbose=1)
model.evaluate(X_test, y_test, batch_size=1)

Result : 1.0033315420150757

Added Conv1D:

model = Sequential([
    Conv1D(filters=256, kernel_size=5, padding='same', activation='relu', input_shape=(features_count,)),
    Dense(64),
    Activation('relu'),
    Dense(32),
    Activation('softmax'),
    Dense(1),
])

Result : Input 0 is incompatible with layer conv1d_3: expected ndim=3, found ndim=2

input_shape=(features_count,)

was replaced by

input_shape=(features_count,1)

Result : Error when checking input: expected conv1d_4_input to have 3 dimensions, but got array with shape (3, 2)

What is wrong with adding convolutional layer in this way? How to add a convolutional layer to Keras model?

Conv1D expects a 2D data, for it can apply convolution for first dimension along the second dimension. So, your input data must have shape (Batch size, 1, 2). But, Dense layer need 1D, so between Conv1D and Dense you need to add a Flatten layer to transform your data in 1D.

from keras.models import Sequential
from keras.layers import Dense, Conv1D, Activation, Flatten
import numpy as np
X_train = np.array([[-1.0,-1.0], [1.0, -1.0], [1.0,1.0]])
y_train = np.array([[1.0], [-1.0], [0.0]])

X_test = np.array([[1.0,-1.0], [1.0, -1.0]])
y_test = np.array([[1.0], [-1.0]])

features_count = 2

model = Sequential([
    Conv1D(filters=256, kernel_size=5, padding='same', activation='relu', input_shape=(1,features_count)),
    Flatten(),
    Dense(64),
    Activation('relu'),
    Dense(32),
    Activation('softmax'),
    Dense(1),
])

X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])
X_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1])

model.compile(optimizer="adam", loss='mse')
model.fit(X_train, y_train, epochs=10, batch_size=1, verbose=1)
model.evaluate(X_test, y_test, batch_size=1)

Result: 1.00140380859375

Hope this help you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM