Точность нейронной сети Python – правильная реализация? ⇐ Python

Программы на Python
Anonymous
Точность нейронной сети Python – правильная реализация?

Сообщение Anonymous »

Я написал простую нейронную сеть/MLP и получаю какие-то странные значения точности, и мне захотелось все перепроверить.
Это моя предполагаемая настройка: матрица функций с 913 выборками и 192 функции (913 192). Я классифицирую два результата, поэтому мои метки двоичные и имеют форму (913,1). 1 скрытый слой со 100 единицами (на данный момент). Все активации будут использовать tanh, а все потери — регуляризацию l2, оптимизированную с помощью SGD.
Код приведен ниже. Он был написан на Python с использованием платформы Keras (http://keras.io/), но мой вопрос не касается Keras

Код: Выделить всё

input_size = 192
hidden_size = 100
output_size = 1
lambda_reg = 0.01
learning_rate = 0.01
num_epochs = 100
batch_size = 10

model = Sequential()
model.add(Dense(input_size, hidden_size, W_regularizer=l2(lambda_reg), init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))

model.add(Dense(hidden_size, output_size, W_regularizer=l2(lambda_reg), init='uniform'))
model.add(Activation('tanh'))

sgd = SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd, class_mode="binary")

history = History()

model.fit(features_all, labels_all, batch_size=batch_size, nb_epoch=num_epochs, show_accuracy=True, verbose=2, validation_split=0.2, callbacks=[history])
score = model.evaluate(features_all, labels_all, show_accuracy=True, verbose=1)
Я хочу дважды проверить, что написанный мной код действительно соответствует тому, что я хочу, с точки зрения выбора параметров, их значений и т. д.
Используя приведенный выше код, я получаю точность обучающего и тестового набора в пределах 50–60 %. Возможно, я просто использую плохие функции, но я хотел проверить, что может быть не так, поэтому я вручную установил для всех меток и функций что-то, что должно быть предсказуемым:

Код: Выделить всё

labels_all[:500] = 1
labels_all[500:] = 0
features_all[:500] = np.ones(192)*500
features_all[500:] = np.ones(192)
Поэтому я установил для первых 500 образцов метку 1, все остальное помечено 0. Я вручную установил все функции на 500 для каждого из первых 500 образцов, а все остальные функции (для остальных образцов) получают 1
Когда я запускаю это, я получаю точность обучения около 65%, а точность проверки — около 0%. Я ожидал, что обе точности будут чрезвычайно высокими/почти идеальными. Это неверно? Я думал, что все функции с чрезвычайно высокими значениями имеют одинаковую метку (1), а функции с низкими значениями получают метку 0.
В основном мне просто интересно, если мой код/ модель неверна или моя логика неверна.

Подробнее здесь: https://stackoverflow.com/questions/317 ... ementation

Вернуться в «Python»