Я новичок в машинном обучении и Keras. Я сделал Neural Network с Keras для регрессии, выглядящей так:
model = Sequential()
model.add(Dense(57, input_dim=44, kernel_initializer='normal',
activation='relu'))
model.add(Dense(45, activation='relu'))
model.add(Dense(35, activation='relu'))
model.add(Dense(20, activation='relu'))
model.add(Dense(18, activation='relu'))
model.add(Dense(15, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(5, activation='relu'))
model.add(Dense(5, activation='relu'))
model.add(Dense(1, activation='linear'))
Мои данные после предварительной обработки имеют 44 измерения, так что, пожалуйста, дайте мне пример, как я могу сделать CNN.
Первоначально это выглядит следующим образом: https://scontent.fskp1-1.fna.fbcdn.net/v/t1.0-9/40159383_10204721730878434_598395145989128192_n.jpg?_nc_cat=0&_nc_eui2=AeEYA4Nb3gomElC9qt0kF6Ou86P7jidco_LeHxEkmCB0-oVA9YKVe9VAh41SF25YomKTqKdkS96E18-sTCBidxJdbml4OV7FvFuAOWxI4mRafQ&oh=e81f4f56ebdf15e9c6eefbb078b8a982&oe=5BFD4157
Свертка нейронной сети не является лучшим выбором в этом случае. Кстати, вы можете легко справиться с Conv1d:
model = keras.Sequential()
model.add(keras.layers.Embedding(44, 100))
model.add(keras.layers.Conv1D(50, kernel_size=1, strides=1))
model.add(keras.layers.GlobalAveragePooling1D())
# model.add(keras.layers.Dense(10, activation=tf.nn.relu))
model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))
Вы можете добавить слои 2Dconvnet следующим образом:
model.add(Conv2D(32, (3, 3), input_shape=(3, 150, 150)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
где
model.add(Conv2D(<feature maps>, (<kernel size>), input_shape=(<imput-tensor-shape)))
Но будьте осторожны, 2Dconfnet-слои математически отличаются от плотных слоев, поэтому вы не можете легко их складывать. Чтобы складывать слои 2Dconvnet с плотными слоями, вам придется сгладить их (вы, как правило, сделаете это в конце, чтобы получить свой "полностью подключенный слой"):
model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
Вы найдете много хороших руководств по созданию конвективных сетей с керасом. Это, например, фокусируется на распознавании изображений. Приведенные выше примеры взяты из этой статьи.
Чтобы узнать, что делает сверточная сеть, я бы рекомендовал вам эту статью.
Изменить. Но я разделяю мнение, что, возможно, не полезно использовать слои 2DConvnet для вашего примера. Ваша структура данных кажется "плоской", а 2Dconvnets имеет смысл только тогда, когда у вас есть несколько многомерных тензоров в качестве входных данных.
Чтобы ответить на ваш вопрос заранее, я не думаю, что вы можете использовать CNN для своей проблемы. Обычно, когда люди говорят, что используют CNN, они обычно означают двумерную свертку. Он работает с 2D пространственными данными (изображениями). В NLP существует 1D Convolution, которую люди используют для поиска локальных шаблонов в последовательных данных. Я не думаю, что 1D свертка имеет значение в вашем случае. Если вы находитесь на фоне ML, вы можете думать о регрессии, используя фидерные нейронные сети как полиномиальную регрессию. Интуитивно вы разрешаете сети решать, какую степень полинома мы должны использовать, чтобы правильно подобрать данные