R 完全连接层中隐藏节点的数量是否必须等于输出类别的数量?

R 完全连接层中隐藏节点的数量是否必须等于输出类别的数量?,r,nodes,mxnet,R,Nodes,Mxnet,我尝试了使用MXNet包在R中进行图像识别的教程。本教程的目的是识别40个人的脸。数据帧由400张图片组成(每人10张图片)。美国有线电视新闻网是这样的: data <- mx.symbol.Variable('data') # 1st convolutional layer conv_1 <- mx.symbol.Convolution(data = data, kernel = c(5, 5), num_filter = 20) tanh_1 <- mx.symbol.Ac

我尝试了使用MXNet包在R中进行图像识别的教程。本教程的目的是识别40个人的脸。数据帧由400张图片组成(每人10张图片)。美国有线电视新闻网是这样的:

data <- mx.symbol.Variable('data')
# 1st convolutional layer
conv_1 <- mx.symbol.Convolution(data = data, kernel = c(5, 5), num_filter = 20)
tanh_1 <- mx.symbol.Activation(data = conv_1, act_type = "tanh")
pool_1 <- mx.symbol.Pooling(data = tanh_1, pool_type = "max", kernel =    c(2, 2), stride = c(2, 2))

# 2nd convolutional layer
conv_2 <- mx.symbol.Convolution(data = pool_1, kernel = c(5, 5), num_filter = 50)
tanh_2 <- mx.symbol.Activation(data = conv_2, act_type = "tanh")
pool_2 <- mx.symbol.Pooling(data=tanh_2, pool_type = "max", kernel = c(2, 2), stride = c(2, 2))

# 1st fully connected layer
flatten <- mx.symbol.Flatten(data = pool_2)
fc_1 <- mx.symbol.FullyConnected(data = flatten, num_hidden = 500)
tanh_3 <- mx.symbol.Activation(data = fc_1, act_type = "tanh")

# 2nd fully connected layer
fc_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 40)
# Output. Softmax output since we'd like to get some probabilities.
NN_model <- mx.symbol.SoftmaxOutput(data = fc_2)

data模型中的参数明显多于示例。这通常非常糟糕,并可能导致过度装配


您可以采取的另一种方法是采用预先训练的模型,并仅使用您的数据重新训练最后一层(也称为转移学习)。以下是MXNet教程:

我的模型现在可以工作了:

# 1st fully connected layer
flatten <- mx.symbol.Flatten(data = pool_2)
fc_1 <- mx.symbol.FullyConnected(data = flatten, num_hidden = 500)
tanh_3 <- mx.symbol.Activation(data = fc_1, act_type = "tanh")

# 2nd fully connected layer
fc_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 5)
# Output. Softmax output since we'd like to get some probabilities.
NN_model <- mx.symbol.SoftmaxOutput(data = fc_2)
#第一个完全连接的层

谢谢你的回答。我应该提到,我将数据分为一个用于训练模型的训练集(n=1440)和一个用于验证模型的测试集(n=160),因此我认为过度拟合不是问题。结果:1。数值隐藏=80)精度(训练):0.996;准确度(测试):0.99 2.num_隐藏=5),准确度(训练):0.21;准确度(测试):0.05。在第一种情况下,softmax函数提供了80个类别的概率,结果比5个类别的模型要好,即使只有5个人,我尝试将他们分开。
fc_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 80)
# 2nd fully connected layer
fc_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 80)
tanh_4 <- mx.symbol.Activation(data = fc_2, act_type = "tanh")
# 3rd fully connected layer
fc_3 <- mx.symbol.FullyConnected(data = tanh_4, num_hidden = 5)
# Output. Softmax output since we'd like to get some probabilities.
NN_model <- mx.symbol.SoftmaxOutput(data = fc_3)
# 1st fully connected layer
flatten <- mx.symbol.Flatten(data = pool_2)
fc_1 <- mx.symbol.FullyConnected(data = flatten, num_hidden = 500)
tanh_3 <- mx.symbol.Activation(data = fc_1, act_type = "tanh")

# 2nd fully connected layer
fc_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 5)
# Output. Softmax output since we'd like to get some probabilities.
NN_model <- mx.symbol.SoftmaxOutput(data = fc_2)