Ваш вопрос содержит два компонента
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()