神经网络输出的数字可以> 1吗?

时间:2018-10-12 13:17:01

标签: machine-learning neural-network deep-learning artificial-intelligence

通常,在训练网络从给定数据2中确定两个值之间时,我注意到了。

1。)。每个决策使用两个输出神经元,并通过偏爱具有较高值的​​神经元来做出 + ve 决策。

2。)每个决定针对某个阈值的单个神经元都说0.5,因此通过检查神经元是否输出值来做出 + ve 决定> = 0.5

假设某人希望网络根据输入数据进行预测,例如每次都可以根据给定图像预测形状的质心,而不是让输出神经元获得可能的结果数(这肯定是像素数x 2的总像素数(可能有X,Y个值对)。

特别是如何使输出神经元激发,例如(432,50)作为质心,在这种情况下,可能的质心(X,Y)坐标是从0450 [如果不是,则将人工神经元建模为像Grandmother Cell那样运行,然后为什么]

2 个答案:

答案 0 :(得分:2)

您可以将[0,1]输出缩放到所需范围。

如果您希望输出为X∈[0,500]和Y∈[0,500],则可以有两个输出,两个输出均为[0,1]并将每个结果乘以500。

您还应该将输入数据缩放到某个统一范围。一些功能要求输入在特定范围内(例如[0,1]),例如,在[0,10]中有一些输入集,在[0,1000]中有一些输入集可能会使网络混乱或具有不同的功能在不同的范围内可能会使网络难以适当地加权功能。

如果您的输出与输入在同一范围内,则确定按比例缩放输入也将告诉您所需按比例缩放输出。

答案 1 :(得分:1)

您要提出的问题包含两个部分

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()

unnormalized predictions