Получение случайной точности без изменения кода - PullRequest
0 голосов
/ 04 марта 2019

У меня есть простая модель Keras для обучения AND логика.К сожалению точность иногда 0.75 или 1.0 после запуска моего проекта снова и снова.Почему точность меняется без меня, я изменяю epochs или другие параметры.Почему это происходит?

import numpy as np
import keras

from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import RMSprop
from keras.losses import binary_crossentropy

x_train = np.array([[1,1], [0,1], [1,0], [0,0]])
x_val = np.array([[0,1], [1,1], [1,0], [0,0]])
x_test = np.array([[0,1], [1,0], [1,1], [0,0]])


y_train = np.array([[1], [0], [0], [0]])
y_val = np.array([[0], [1], [0], [0]])
y_test = np.array([[0], [0], [1], [0]])

model = Sequential()
model.add(Dense(16, input_dim=2))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))

opt = RMSprop(lr=0.001)
model.compile(
    optimizer=opt,
    loss=binary_crossentropy,
    metrics=['accuracy']    
)

model.summary()

model.fit(x=x_train, y=y_train, batch_size=32, epochs=100, validation_data=(x_val, y_val))

score = model.evaluate(x_test, y_test, batch_size=32)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

model.predict_classes(np.array([[0,1]]))

1 Ответ

0 голосов
/ 04 марта 2019

Несмотря на (очень) небольшой размер вашей выборки (4) и тот факт, что у вас фактически нет отдельных наборов обучения, проверки и тестирования (все они идентичны), ваша модель не является детерминированной : всегда есть случайный элемент инициализации весов.Это иногда приводит к модели, которая может правильно предсказать все ваши (4 ...) тренировочные выборки (точность 1,0), а иногда к моделям, которые неправильно классифицируют только одну выборку (точность 0,75).Здесь нет ничего странного.

Почему веса инициализируются случайным образом?

Как еще?Не стоит инициализировать их значением 0 (вы можете сделать это с смещением , но не с весами), потому что тогда ваша модель не сможет учиться ...

Вам может пригодиться следующее:

Каковы хорошие начальные веса в нейронной сети? (осторожно, потому что она немного старая ...)

Зачем инициализировать нейронную сеть со случайными весами?

Я имею в виду, что есть доказательства, что некоторые веса в начале лучше для точности?

Не совсем;но были доказательства того, что некоторые методы инициализации работают лучше на практике.Слои Keras в настоящее время инициализируются glorot_uniform (см. Аргумент kernel_initializer по умолчанию в документации слоев ).Возможно, вы захотите взглянуть и, возможно, поэкспериментировать с различными инициализаторами , доступными в Keras .Это все еще область активных исследований ...

...