2016-01-08 3 views
4

Я создаю свою первую искусственную многослойную нейронную сеть персептрона, используя Keras.Как тренировать и настраивать искусственную многослойную нейронную сеть персептрона с использованием Keras?

Это мой ввод данных:

enter image description here

Это мой код, который я использовал, чтобы построить свою первоначальную модель, которая в основном следует пример кода Keras:

model = Sequential() 
model.add(Dense(64, input_dim=14, init='uniform')) 
model.add(Activation('tanh')) 
model.add(Dropout(0.5)) 
model.add(Dense(64, init='uniform')) 
model.add(Activation('tanh')) 
model.add(Dropout(0.5)) 
model.add(Dense(2, init='uniform')) 
model.add(Activation('softmax')) 

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='mean_squared_error', optimizer=sgd) 
model.fit(X_train, y_train, nb_epoch=20, batch_size=16) 

Выход:

Epoch 1/20 
1213/1213 [==============================] - 0s - loss: 0.1760  
Epoch 2/20 
1213/1213 [==============================] - 0s - loss: 0.1840  
Epoch 3/20 
1213/1213 [==============================] - 0s - loss: 0.1816  
Epoch 4/20 
1213/1213 [==============================] - 0s - loss: 0.1915  
Epoch 5/20 
1213/1213 [==============================] - 0s - loss: 0.1928  
Epoch 6/20 
1213/1213 [==============================] - 0s - loss: 0.1964  
Epoch 7/20 
1213/1213 [==============================] - 0s - loss: 0.1948  
Epoch 8/20 
1213/1213 [==============================] - 0s - loss: 0.1971  
Epoch 9/20 
1213/1213 [==============================] - 0s - loss: 0.1899  
Epoch 10/20 
1213/1213 [==============================] - 0s - loss: 0.1957  
Epoch 11/20 
1213/1213 [==============================] - 0s - loss: 0.1923  
Epoch 12/20 
1213/1213 [==============================] - 0s - loss: 0.1910  
Epoch 13/20 
1213/1213 [==============================] - 0s - loss: 0.2104  
Epoch 14/20 
1213/1213 [==============================] - 0s - loss: 0.1976  
Epoch 15/20 
1213/1213 [==============================] - 0s - loss: 0.1979  
Epoch 16/20 
1213/1213 [==============================] - 0s - loss: 0.2036  
Epoch 17/20 
1213/1213 [==============================] - 0s - loss: 0.2019  
Epoch 18/20 
1213/1213 [==============================] - 0s - loss: 0.1978  
Epoch 19/20 
1213/1213 [==============================] - 0s - loss: 0.1954  
Epoch 20/20 
1213/1213 [==============================] - 0s - loss: 0.1949 

Как подготовить и настроить эту модель и ge t мой код для вывода моей лучшей прогностической модели? Я новичок в нейронных сетях, и я просто совершенно смущен тем, что является следующим шагом после создания модели. Я знаю, что хочу оптимизировать его, но я не уверен, какие функции нужно настроить или если я должен делать это вручную или как писать код для этого.

ответ

9

Некоторые вещи, которые вы могли бы сделать это:

  • Изменение функции потерь от mean_squared_error к binary_crossentropy. mean_squared_error предназначен для регрессии, но вы хотите классифицировать свои данные.
  • Добавить show_accuracy=True в вашу fit() функцию, которая выводит точность вашей модели в каждую эпоху. Эта информация, вероятно, более полезна для вас, чем просто потеря.
  • Добавить validation_split=0.2 в вашу fit() функцию. В настоящее время вы тренируетесь только на тренировочном наборе и ничего не проверяете. Это не работает в машинах, так как вы не можете быть уверены, что ваша модель не просто запомнила правильные ответы на ваш набор данных (не понимая, почему эти ответы верны).
  • Переход от Обамы/Ромни к демократу/республиканцу и добавление данных предыдущих выборов. ~ 1200 примеров - довольно маленький набор данных для нейронных сетей. Также добавьте столбцы с ценной информацией, например, уровень безработицы или население плотность. Обратите внимание, что некоторые из значений (например, число населения), вероятно, похожи на имя состояния, например, ваша сеть, скорее всего, узнает, что Техас означает Republican.
  • Если вы еще этого не сделали, нормализуйте все свои значения до диапазона от 0 до 1 (путем вычитания из каждого значения минимума столбца, а затем деления на (max-min) столбца). Нейронные сети могут обрабатывать нормализованные данные лучше, чем ненормализованные данные.
  • Попробуйте Adam и Adagrad вместо SGD. Иногда они работают лучше. (См documentation about optimizers.)
  • Попробуйте Activation('relu'), LeakyReLU, PReLU и ELU вместо Activation('tanh'). Танх редко бывает лучшим выбором. (См. advanced activation functions.)
  • Попробуйте увеличить/уменьшить размеры плотных слоев (например, от 64 до 128). Также попробуйте добавить/удалить слои.
  • Попробуйте добавить BatchNormalization слоев (до слоев Activation). (См. documentation.)
  • Попробуйте изменить скорость отсева (например, от 0.5 до 0.25).
Смежные вопросы