CNN с Питоном и Керасом

1

Я новичок в машинном обучении и 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

  • 0
    Почему вы не используете простую технику регрессии? вместо того, чтобы использовать CNN?
  • 0
    У меня есть задание сравнить результаты DNN с результатами CNN для этих данных
Теги:
keras
conv-neural-network

3 ответа

1
Лучший ответ

Свертка нейронной сети не является лучшим выбором в этом случае. Кстати, вы можете легко справиться с 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))
1

Вы можете добавить слои 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 имеет смысл только тогда, когда у вас есть несколько многомерных тензоров в качестве входных данных.

1

Чтобы ответить на ваш вопрос заранее, я не думаю, что вы можете использовать CNN для своей проблемы. Обычно, когда люди говорят, что используют CNN, они обычно означают двумерную свертку. Он работает с 2D пространственными данными (изображениями). В NLP существует 1D Convolution, которую люди используют для поиска локальных шаблонов в последовательных данных. Я не думаю, что 1D свертка имеет значение в вашем случае. Если вы находитесь на фоне ML, вы можете думать о регрессии, используя фидерные нейронные сети как полиномиальную регрессию. Интуитивно вы разрешаете сети решать, какую степень полинома мы должны использовать, чтобы правильно подобрать данные

Ещё вопросы

Сообщество Overcoder
Наверх
Меню