让我们假设我有一个卷积神经网络,它应该预测图像中的两个不同的(语义)事物,这些事物可以分别在N维输出中分类 . 所以我的网络看起来像这样:
# architecture
input
(RGB images)
|
conv_layer 1
|
.....
|
conv_layer n
|
_______________
| |
fc1_x fc1_y <-- fully-connected layer 1
| |
fc2_x fc2_y <-- fully-connected layer 2 / output
(output_x) (output_y)
output_x
是维度 (1, 1000)
的向量,因此预测超过1000个类 . output_y
是维度 (1, 500)
的向量,因此预测超过500个类 .
x和y中的类在语义上是相关的,因此它们不是单热编码的 . 相反,在训练向量中拟合围绕真实类的正态分布 .
在每个训练步骤中,我都将这样的交叉熵误差降到最低:
train_step_x = tf.train.AdamOptimizer(0.001).minimize(cross_entropy_x)
train_step_y = tf.train.AdamOptimizer(0.001).minimize(cross_entropy_y)
所以我正在为 output_x
和 output_y
计算不同的交叉熵误差 .
到目前为止,我对网络的(培训)结果感到满意 . 但是,网络架构不是最终的 . 它将变得更大并最终更深,训练数据集将比现在更大几个数量级 .
My question is :这是一个合理的网络架构吗?或者它被认为是一个糟糕的设计?
Is Tensorflow really training the two streams separately ?或者我的两个AdamOptimizers每学习一步坏设计,我只是得到了好看的结果虽然我的架构不会被认为是"good"这个问题?
我认为x和y数据/类的两个不同的完全连接"streams"对于应该在两个不同的类之间进行预测的体系结构是合理的 .