让我们假设我有一个卷积神经网络,它应该预测图像中的两个不同的(语义)事物,这些事物可以分别在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_xoutput_y 计算不同的交叉熵误差 .

到目前为止,我对网络的(培训)结果感到满意 . 但是,网络架构不是最终的 . 它将变得更大并最终更深,训练数据集将比现在更大几个数量级 .

My question is :这是一个合理的网络架构吗?或者它被认为是一个糟糕的设计?

Is Tensorflow really training the two streams separately ?或者我的两个AdamOptimizers每学习一步坏设计,我只是得到了好看的结果虽然我的架构不会被认为是"good"这个问题?

我认为x和y数据/类的两个不同的完全连接"streams"对于应该在两个不同的类之间进行预测的体系结构是合理的 .