没有单热向量输出的 CNTK 神经网络 (multi-class classifier)
CNTK Neural network with not one-hot-vector output (multi-class classifier)
感谢您提供 CNTK 工具,这些示例 运行 非常快。几天以来,我尝试建立一个简单的网络,但我不明白。我需要一个有 2 个输入和 3 个输出的网络,例如:
|features 0.3 0.5 |labels 0.2 0.7 0.9
输出不是单热向量,网络必须学习标签值0.2 0.7 0.9
。但是大多数例子都有一个单热向量作为输出,所以我不清楚如何解决这个问题。我曾尝试将教程更改为 3 分类,但它不起作用,网络无法正确学习输出。我试过的网络是:
BrainScriptNetworkBuilder = {
SDim = 2 # feature dimension
H1Dim = 50 # hidden dimension
H2Dim = 50 # hidden dimension
LDim = 3 # number of classes (labels)
model (features) = {
W0 = ParameterTensor {(H1Dim:SDim)} ; b0 = ParameterTensor {H1Dim}
W1 = ParameterTensor {(H2Dim:H1Dim)} ; b1 = ParameterTensor {H2Dim}
W2 = ParameterTensor {(LDim:H2Dim)} ; b2 = ParameterTensor {LDim}
r1 = ReLU(W0 * features + b0) # hidden layer 1
r2 = ReLU(W1 * r1 + b1) # hidden layer 2
z = ReLU(W2 * r2 + b2)
}.z
# define inputs
features = Input {SDim, sparse = false}
labels = Input {LDim, sparse = false}
# apply model to features
z = model (features)
# define criteria and output(s)
ce = SquareError(labels, z) # criterion (loss)
err = SquareError(labels, z) # additional metric
# connect to the system. These five variables must be named exactly like this.
featureNodes = (features)
inputNodes = (labels)
criterionNodes = (ce)
evaluationNodes = (err)
outputNodes = (z)
}
所以我的问题是:如何在CNTK中搭建网络,使输出的不是one hot vector?
感谢您的帮助。
当您的标签不是单热向量时,squareError 是一个很好的最小化损失函数。如果某些示例具有 one-hot 标签,您仍然可以使用 squareError。所以我认为你做的一切都是对的,你可能只需要调整学习率就可以让它工作得很好。
感谢您提供 CNTK 工具,这些示例 运行 非常快。几天以来,我尝试建立一个简单的网络,但我不明白。我需要一个有 2 个输入和 3 个输出的网络,例如:
|features 0.3 0.5 |labels 0.2 0.7 0.9
输出不是单热向量,网络必须学习标签值0.2 0.7 0.9
。但是大多数例子都有一个单热向量作为输出,所以我不清楚如何解决这个问题。我曾尝试将教程更改为 3 分类,但它不起作用,网络无法正确学习输出。我试过的网络是:
BrainScriptNetworkBuilder = {
SDim = 2 # feature dimension
H1Dim = 50 # hidden dimension
H2Dim = 50 # hidden dimension
LDim = 3 # number of classes (labels)
model (features) = {
W0 = ParameterTensor {(H1Dim:SDim)} ; b0 = ParameterTensor {H1Dim}
W1 = ParameterTensor {(H2Dim:H1Dim)} ; b1 = ParameterTensor {H2Dim}
W2 = ParameterTensor {(LDim:H2Dim)} ; b2 = ParameterTensor {LDim}
r1 = ReLU(W0 * features + b0) # hidden layer 1
r2 = ReLU(W1 * r1 + b1) # hidden layer 2
z = ReLU(W2 * r2 + b2)
}.z
# define inputs
features = Input {SDim, sparse = false}
labels = Input {LDim, sparse = false}
# apply model to features
z = model (features)
# define criteria and output(s)
ce = SquareError(labels, z) # criterion (loss)
err = SquareError(labels, z) # additional metric
# connect to the system. These five variables must be named exactly like this.
featureNodes = (features)
inputNodes = (labels)
criterionNodes = (ce)
evaluationNodes = (err)
outputNodes = (z)
}
所以我的问题是:如何在CNTK中搭建网络,使输出的不是one hot vector?
感谢您的帮助。
当您的标签不是单热向量时,squareError 是一个很好的最小化损失函数。如果某些示例具有 one-hot 标签,您仍然可以使用 squareError。所以我认为你做的一切都是对的,你可能只需要调整学习率就可以让它工作得很好。