你的问题包含两个部分
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()
