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

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

0 голосов
/ 27 августа 2018

Я новичок в машинном обучении и керасе.Я сделал нейронную сеть с 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 & о = e81f4f56ebdf15e9c6eefbb078b8a982 & ае = 5BFD4157

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Вы можете добавить 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'))

Вы найдете много хороших уроков по созданию сетей с керами. Этот , например, фокусируется на распознавании изображений. Приведенные выше примеры взяты из этой статьи.

Чтобы узнать, чем занимается сверточная сеть, я бы порекомендовал вам эту статью .

Edit: Но я разделяю мнение, что для вашего примера может быть нецелесообразно использовать слои 2DConvnet. Ваша структура данных кажется «плоской», и 2D-сети могут иметь смысл только в том случае, если у вас есть несколько многомерных тензоров в качестве входных данных.

0 голосов
/ 27 августа 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...