Я реализовал простой ANN, но не получил желаемый результат
Что-то не так с кодом или мне нужно включить больше записей входных данных и изменить количество скрытых слоев? Я имею в виду этот урок (стр. 4)
import cv2
import numpy as np
ann = cv2.ml.ANN_MLP_create()
ann.setTrainMethod(cv2.ml.ANN_MLP_RPROP | cv2.ml.ANN_MLP_UPDATE_WEIGHTS)
ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM)
ann.setLayerSizes(np.array([10, 9, 3]))
ann.setTermCriteria(( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 ))
i1 = [190, 150, 170, 290, 280, 270, 400, 320, 330,349]
i2 = [95, 95, 31, 64, 98, 39, 18, 12, 48,74]
i3 = [48, 45, 19, 78, 23, 32, 30, 32, 33,79]
o1 = [0, 0, 1]
o2 = [0, 1, 0]
o3 = [1, 0, 0]
SAMPLES = 5000
for x in range(0, SAMPLES):
print "Samples %d/%d" % (x, SAMPLES)
ann.train(np.array([i1,i2,i3], dtype=np.float32), cv2.ml.ROW_SAMPLE, np.array([o1,o2,o3], dtype=np.float32))
print ann.predict(np.array([i1], dtype=np.float32))
print ann.predict(np.array([i2], dtype=np.float32))
print ann.predict(np.array([i3], dtype=np.float32))
Я получаю свой вывод как
(0.0, array([[nan, nan, nan]], dtype=float32))
(0.0, array([[nan, nan, nan]], dtype=float32))
(0.0, array([[nan, nan, nan]], dtype=float32))
Не должен ли быть ожидаемый результат
(0.0, .......
(1.0, .......
(2.0, .......
Почему я получаю "Нэн"?
Есть ли другой способ предсказать вывод данных, которых ANN не видел? Пример - [84, 43, 89, 74, 45, 32, 78, 46, 43, 45]
1 ответ
У меня есть эта проблема в моих библиотеках ANN, когда я устанавливаю слишком высокий параметр скорости обучения. Веса начинают колебаться (1,-1,5,2,-2,5 0-"хороший вес") и быстро выходят из диапазона переменных. Большие сети должны иметь меньший параметр скорости обучения.