小编sun*_*ide的帖子

亚当优化器在20万批次之后变得混乱,训练损失增加

在训练网络时,我一直看到一种非常奇怪的行为,经过几十次迭代(8到10小时)的学习,一切都中断,训练损失增加:

损失爆炸

训练数据本身是随机的,并且分布在.tfrecord包含1000每个示例的许多文件中,然后在输入阶段再次洗牌并批量处理200示例.

的背景

我正在设计一个同时执行四个不同回归任务的网络,例如确定对象出现在图像中的可能性并同时确定其方向.网络以几个卷积层开始,一些具有剩余连接,然后分支到四个完全连接的段.

由于第一次回归导致概率,我使用交叉熵进行损失,而其他使用经典L2距离.然而,由于它们的性质,概率损失大约为0..1,而定向损失可能要大得多0..10.我已经将输入和输出值标准化并使用剪切

normalized = tf.clip_by_average_norm(inferred.sin_cos, clip_norm=2.)
Run Code Online (Sandbox Code Playgroud)

在事情变得非常糟糕的情况下.

我已经(成功地)使用Adam优化器来优化包含所有不同损失(而不是reduce_sum它们)的张量,如下所示:

reg_loss = tf.reduce_sum(tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES))
loss = tf.pack([loss_probability, sin_cos_mse, magnitude_mse, pos_mse, reg_loss])

optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate,
                                   epsilon=self.params.adam_epsilon)
op_minimize = optimizer.minimize(loss, global_step=global_step)
Run Code Online (Sandbox Code Playgroud)

为了在TensorBoard中显示结果,我实际上是这样做的

loss_sum = tf.reduce_sum(loss)
Run Code Online (Sandbox Code Playgroud)

标量摘要.

Adam被设置为学习率1e-4和epsilon 1e-4(我看到与epislon的默认值相同的行为,当我保持学习率时,它会更快地打破1e-3).正规化对这一点也没有影响,它在某种程度上是这样做的.

我还应该补充说,停止训练并从最后一个检查点重新启动 - 这意味着训练输入文件也会再次洗牌 - 导致相同的行为.在那一点上,训练似乎总是表现得相似.

neural-network deep-learning conv-neural-network tensorflow

27
推荐指数
2
解决办法
9109
查看次数

如何使用tf.summary.tensor_summary?

TensorFlow提供的tf.summary.tensor_summary()函数似乎是以下的多维变体tf.summary.scalar():

tf.summary.tensor_summary(name, tensor, summary_description=None, collections=None)
Run Code Online (Sandbox Code Playgroud)

我认为它可以用于总结每个类的推断概率......有点像

op_summary = tf.summary.tensor_summary('classes', some_tensor)
# ...
summary = sess.run(op_summary)
writer.add_summary(summary)
Run Code Online (Sandbox Code Playgroud)

但是,似乎TensorBoard根本没有提供显示这些摘要的方法.它们是如何被使用的?

tensorflow

25
推荐指数
1
解决办法
1840
查看次数

Bullet物理引擎,如何冻结对象?

使用Bullet 2.76我试图冻结一个物体(刚体),使其立即停止移动,但仍然响应碰撞.

我尝试将它的激活状态设置为DISABLE_SIMULATION,但是它几乎不存在于其他对象中.此外,如果对象在禁用时与其"碰撞",则会发生奇怪的事情(对象通过静态物体落下等)

我想,暂时将它转换为静态刚体可能会起作用,但是在Bullet的方面是否存在一种现有的"原生"方式来实现这一点?

编辑:有没有办法关闭特定对象的重力?

physics bullet game-physics

15
推荐指数
4
解决办法
1万
查看次数

非会员转换功能; 转换不同的类型,例如DirectX向量到OpenGL向量

我目前正在研究一种游戏"引擎",它需要在3D引擎,物理引擎和脚本语言之间移动值.由于我需要经常将物理引擎中的矢量应用到3D对象,并且希望能够通过脚本系统控制3D以及物理对象,我需要一种机制来转换一种类型的矢量(例如vector3d<float>)到另一种类型的向量(例如btVector3).不幸的是,我不能对类/结构的布局做出任何假设,所以一个简单的reinterpret_cast可能不会做.

所以问题是:是否有某种"静态"/非成员投射方法基本上实现:

vector3d<float> operator vector3d<float>(btVector3 vector) {
    // convert and return
}

btVector3 operator btVector3(vector3d<float> vector) {
    // convert and return
}
Run Code Online (Sandbox Code Playgroud)

现在这不会编译,因为转换操作符需要是成员方法.(error C2801: 'operator foo' must be a non-static member)

c++ casting

11
推荐指数
2
解决办法
7417
查看次数

在C++中,在构造期间使用"this"指针初始化类成员

我想创建一个与某个父子关系中的另一个类相关联的类.为此,"child"类需要引用它的父级.

例如:

template <typename T>
class TEvent {
    private: T* Owner;
    public: TEvent(T* parent) : Owner(parent) {}
};

class Foo {
    private: TEvent<Foo> Froozle; // see below
};
Run Code Online (Sandbox Code Playgroud)

现在的问题是我不能Froozle直接初始化实例,也不能使用Foo构造函数的实例化列表,因为this那里不允许引用.除了添加另一个方法setParent(T*)(我不太喜欢,因为这意味着我必须让TEvent<>实例处于无效状态),有没有办法实现这一点?

c++ initialization class this

9
推荐指数
2
解决办法
5337
查看次数

Android:在活动屏幕方向更新期间保持MediaPlayer运行

我使用MediaPlayer播放MP3.目前我通过使用禁用屏幕方向更改

android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation"
Run Code Online (Sandbox Code Playgroud)

在清单中.我现在想要支持横向模式 - 即删除那些标签 - 但是存在的问题是在销毁/创建周期期间玩家停止然后重新启动.这是可以的,我实际上甚至手动执行此操作onPause()以在活动进入后台时停止播放器.

为了使它在方向更改期间保持运行,我尝试将其设置为静态(并使用应用程序上下文创建它一次).当然,当我删除了player.stop()onPause()现在,但它确实我想要的-嗯,直到活动进入后台.

那么,有两个问题:

  • 如何确定在调用之后是否将直接重新创建活动 onStop()
  • 或者:如何MediaPlayer在该周期内保持运行,但在应用程序进入后台时停止运行?

android screen-orientation android-mediaplayer android-activity

9
推荐指数
1
解决办法
6004
查看次数

xavier_initializer和xavier_initializer_conv2d有什么区别?

我注意到TensorFlow 1.0在contrib中包含两个Xavier初始化助手,

两者都链接到同一文档页面并具有相同的签名:

tf.contrib.layers.xavier_initializer(uniform=True, seed=None, dtype=tf.float32)
tf.contrib.layers.xavier_initializer_conv2d(uniform=True, seed=None, dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)

但是它们之间的差异根本没有解释.我可以通过名称猜测该_conv2d版本应该用于2D卷积层,但如果使用常规版本会有明显的影响吗?

neural-network deep-learning conv-neural-network tensorflow

9
推荐指数
1
解决办法
4500
查看次数

将WCF Web服务绑定到特定的网络接口/ IP

在具有多个网卡的计算机上,我需要将WCF Web服务绑定到特定的网络接口.似乎默认是在所有网络接口上绑定.

该机器有两个带IP 192.168.0.10和IP的网络适配器192.168.0.11.我有一个绑定的Apache运行,需要运行webservice .(由于外部环境,我无法选择其他端口.)192.168.0.10:80192.168.0.11:80

我尝试了以下方法:

string endpoint = "http://192.168.0.11:80/SOAP";
ServiceHost = new ServiceHost(typeof(TService), new Uri(endpoint));
ServiceHost.AddServiceEndpoint(typeof(TContract), Binding, "");
// or: ServiceHost.AddServiceEndpoint(typeof(TContract), Binding, endpoint);
Run Code Online (Sandbox Code Playgroud)

但它不起作用; netstat -ano -p tcp总是显示监听的web服务0.0.0.0:80,这是所有接口(如果我得到了正确的话).当我首先启动Apache时,它正确地绑定到另一个接口,这反过来阻止WCF服务绑定到"all".

有任何想法吗?

wcf networking binding web-services interface

8
推荐指数
1
解决办法
2618
查看次数

OpenAL设备,缓冲区和上下文关系

我正在尝试创建一个面向对象的模型来包装OpenAL,并且在理解设备,缓冲区和上下文时遇到一些问题.

从我在程序员指南中可以看到,有多个设备,每个设备可以有多个上下文以及多个缓冲区.每个上下文都有一个监听器,alListener*()所有函数都在活动上下文的监听器上运行.(这意味着如果我想改变它的倾听者,我必须首先激活另一个上下文,如果我做对了.)到目前为止,那么好.令我恼火的是,我需要将设备传递给alcCreateContext()函数,但没有alGenBuffers().

这怎么工作呢?当我打开多个设备时,在哪个设备上创建了缓冲区?缓冲区是否在所有设备之间共享?如果我关闭所有打开的设备,缓冲区会发生什么?

(或者我错过了什么?)

audio openal

8
推荐指数
1
解决办法
2112
查看次数

使用GCC"人工"函数属性的用例

我刚刚阅读了GCC函数属性,artificial但没有完全得到描述.你能给我一些有用的例子吗?

c attributes gcc

8
推荐指数
1
解决办法
1512
查看次数