tensorflow - Tensorflow Estimators:分别训练图像网格的正确方法
问题描述
我正在尝试训练本文所述的对象检测模型
有 3 个全连接层,有 512、512、25 个神经元。最后一个卷积层的 16x55x55 特征图被馈送到全连接层以检索适当的类。在这个阶段,由 (16x1x1) 描述的每个网格都被馈送到全连接层,以将网格分类为属于 25 个类之一。结构如下图所示
我正在尝试调整 TF MNIST 分类教程中的代码,我想知道是否可以像下面的代码片段一样将每个网格的损失求和并使用它来训练模型权重。
flat_fmap = tf.reshape(last_conv_layer, [-1, 16*55*55])
total_loss = 0
for grid of flat_fmap:
dense1 = tf.layers.dense(inputs=grid, units=512, activation=tf.nn.relu)
dense2 = tf.layers.dense(inputs=dense1, units=512, activation=tf.nn.relu)
logits = tf.layers.dense(inputs=dense2, units=25)
total_loss += tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train_op = optimizer.minimize(
loss=total_loss,
global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode=tf.estimator.ModeKeys.TRAIN, loss=total_loss, train_op=train_op)
在上面的代码中,我认为每次迭代都会创建 3 个新层。但是,我希望在对一个网格和另一个网格进行分类时保留权重。
解决方案
添加到 total_loss 应该没问题。
tf.losses.sparse_softmax_cross_entropy 也将损失加在一起。
它使用 logits 计算 sparse_softmax,然后使用 math_ops.reduce_sum 通过求和来减少结果数组。因此,您以一种或另一种方式将它们加在一起。
网络声明上的 for 循环似乎不寻常,在运行时执行它并通过 feed_dict 传递每个网格可能更有意义。
dense1 = tf.layers.dense(inputs=X, units=512, activation=tf.nn.relu)
dense2 = tf.layers.dense(inputs=dense1, units=512, activation=tf.nn.relu)
logits = tf.layers.dense(inputs=dense2, units=25)
loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(loss)
total_loss = 0
with tf.session as sess:
sess.run(init)
for grid in flat_fmap:
_, l = sess.run([optimizer,loss], feed_dict{X: grid, labels=labels})
total_loss += l
推荐阅读
- html - 如何更改 .container 的位置
- powerbi - 如何在 DAX 中获取状态持续时间?
- excel - VBA IF Then Else 循环问题,对比较值和逻辑感到困惑
- javascript - Jqgrid:获取应用本地过滤器后的行数
- android - 为什么设置 setGroupSummary 时 Android O 中的通知徽章不显示?
- angular - 如何在 *ngFor 中添加依赖于数据的单个元素?
- c# - 使用 C# 或 Linq 对 MongoDB 和 SQL 使用相同的语法
- mongodb - 在 MongoDb 中按 15 分钟的时间间隔对重叠系列进行分组
- android - 如何使用本地通知获取有关 Firebase 聊天应用程序的通知?
- xamarin.forms - Packacge Sqlite.net.platform.xamarinAndroidN 3.1.1 不兼容 monoandroid9(MonoAndroid, version=v9.0)