Могут ли нейронные сети выводить числа> 1? - PullRequest
0 голосов
/ 12 октября 2018

Обычно при обучении Сети выбирать между двумя значениями из заданных данных 2 вещей, которые я заметил.

1.) Используются два выходных нейрона на решение и предпочтениепринимается решение нейрона с более высоким значением a + ve .

2.) Один нейрон на решение против определенного порога говорит 0.5, следовательно, a + ve решение принимается путем проверки, выводит ли нейрон значение > = 0.5

Скажем, нужно, чтобы сеть делала предсказания на основе входных данных, таких какпрогнозирование центроида фигуры из заданного изображения каждый раз, что можно сделать, кроме как сделать из выходных нейронов возможное количество результатов (которое, безусловно, является полным числом пикселей x 2 из-за возможных пар X,Y значений).

В частности, как можно заставить выходные нейроны срабатывать, например (432,50), поскольку центроид в этом случае говорит, что возможные координаты центроида (X,Y) находятся в диапазоне от 0 до 450 [ Другими словами, можно ли смоделировать искусственные нейроны так, чтобы они вели себя как Бабушкин Клетка , если нет, то почему ] ?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Ваш вопрос содержит два компонента

1.) Может ли нейронная сеть изучать такие понятия, как GrandMa.Ответ - да, однако принятый подход обычно отличается от того, что вы описали.Ветвь ML называется обучением представлению.Проще говоря, типичная концепция такова: вектор используется для описания всех концепций.Каждая запись вектора соответствует нейрону нейронной сети.Однако концепции не отображаются непосредственно на отдельные нейроны.Можно было бы применить это, но это не имело бы смысла.

2.) Могут ли нейронные сети предсказывать числа.Действительно, как и в другом ответе, вы можете использовать нормализацию вывода - это сопоставить целевые значения в диапазоне чисел 0-1 и затем денормализовать.Однако у этого недостатка есть то, что потребуется очень много времени, пока ваша нейронная сеть не приблизится к экстремальным значениям.Альтернативный и гораздо более простой подход заключается в использовании нейронной сети для регрессии.Идея состоит в том, чтобы не использовать функцию сжатия, такую ​​как relu, в выходном слое, но, например, функцию линейной активации.Следующая функция, например, предсказывает два столбца в iris, используя Keras

iris = load_iris()
idf = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                     columns= iris['feature_names'] + ['target'])

X = idf[["sepal length (cm)","sepal width (cm)","target"]] #this is ugly including class not ordinal
Y = idf[["petal length (cm)","petal width (cm)"]]
model = Sequential()
model.add(Dense(8, input_dim=3,
                activation='relu'))
model.add(Dense(16, activation='softmax'))
model.add(Dense(2, activation='linear'))
model.compile(loss='mse', optimizer='adam', metrics=['mae'])
model.fit(X.values, Y.values, epochs=1000, verbose=1)
Yp = model.predict(X.values)
#print([Y.iloc[:,0],Y.iloc[:,1],Y.iloc[:,0]-Yp[:,0],Y.iloc[:,1]-Yp[:,1]])
plt.scatter(Y.iloc[:,0].values,
                        Y.iloc[:,1].values)
for (x,y,dx,dy) in  zip(Y.iloc[:,0].values,
                        Y.iloc[:,1].values,
                        (Y.iloc[:,0].values-Yp[:,0]),
                        (Y.iloc[:,1].values-Yp[:,1])):
    #print(str(x)+" "+str(y)+" "+str(dx)+" "+str(dy))
    plt.arrow(x,y,dx,dy)
plt.show()

unnormalized predictions

0 голосов
/ 12 октября 2018

Вы можете масштабировать свой выходной сигнал [0,1] до требуемого диапазона.

Если вы хотите, чтобы ваш выходной сигнал был X ∈ [0,500] и Y ∈ [0,500], вы можете иметь 2 выхода, которыеоба выведите [0,1] и умножьте каждый результат на 500.

Вы также должны масштабировать свои входные данные до некоторого однородного диапазона.Некоторые функции требуют, чтобы вход находился в определенном диапазоне (например, [0,1]) и, например, имел некоторые входные наборы в [0,10], а некоторые в [0,1000] могут запутать сеть или иметь другие особенностив разных диапазонах может затруднить правильное взвешивание функций в сети.

Если ваш выходной сигнал находится в том же диапазоне, что и входной, определение того, насколько масштабировать вход, также скажет вам, насколько вынужно масштабировать вывод.

...