通常,在培训网络以从给定的数据中选择两个值时,我注意到了一些2
问题。
(1.)每个判决使用两个输出神经元,并通过偏爱较高值的神经元作出+ve决策。
(2.)2.)每个神经元对一个特定阈值的决定,例如0.5
,因此,通过检查神经元是否输出值>= 0.5
来做出+ve决策。
比方说,人们希望网络根据输入数据进行预测,比如每次从给定的图像中预测形状的质心,除了让输出神经元得到可能的结果数(这绝对是由于X,Y
值对而产生的像素x的全部数量)之外,还能做什么。
具体来说,如何才能使输出神经元像质心一样激发(432,50
),在这种情况下,可能的质心(X,Y
)坐标是从0
到450
(),换句话说,人工神经元能被建模成像祖母细胞那样的行为--如果不是,为什么是]?
发布于 2018-10-12 13:28:40
您可以将0,1输出缩放到所需的范围。
如果您希望输出为X∈0,500和Y∈0, 500,则可以有两个输出,它们都输出0,1,并将每个结果乘以500。
您还应该将输入数据缩放到一些统一的范围。有些功能要求输入在特定的范围(例如,0,1),例如,在0、10和0,1000中有一些输入集可能会混淆网络或在不同范围内具有不同的特征,从而使网络更难适当地加权这些特征。
如果您的输出与您的输入处于相同的范围内,那么根据输入的比例来确定输入的大小也会告诉您您需要对输出进行多少缩放。
发布于 2018-10-13 19:23:12
你的问题包含两个组成部分
1.)神经网络能学习像GrandMa这样的概念吗。答案是肯定的,然而,所采取的方法通常与您所描述的不同。ML的分支称为表示学习。简单地说,典型的概念如下:使用向量来描述所有概念。向量的每个条目对应于神经网络的一个神经元。然而,概念并不直接映射到单个神经元上。人们可以强制执行,但这是没有意义的。
2.)神经网络能预测数字吗。实际上,就像在另一个答案中一样,您可以使用输出规范化--这是映射数字范围0-1上的目标值,然后再进行去形处理。然而,这有一个缺点,那就是你的神经网络要花很长时间才能收敛到极大值。另一种更容易的方法是使用神经网络进行回归。这个想法基本上不是在输出层中使用像relu这样的压缩函数,而是使用一个线性激活函数。例如,下面的函数使用Keras预测iris
中的两列
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()
https://stackoverflow.com/questions/52780351
复制相似问题