在训练网络时,我一直看到一种非常奇怪的行为,经过几十次迭代(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).正规化对这一点也没有影响,它在某种程度上是这样做的.
我还应该补充说,停止训练并从最后一个检查点重新启动 - 这意味着训练输入文件也会再次洗牌 - 导致相同的行为.在那一点上,训练似乎总是表现得相似.
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根本没有提供显示这些摘要的方法.它们是如何被使用的?
使用Bullet 2.76我试图冻结一个物体(刚体),使其立即停止移动,但仍然响应碰撞.
我尝试将它的激活状态设置为DISABLE_SIMULATION,但是它几乎不存在于其他对象中.此外,如果对象在禁用时与其"碰撞",则会发生奇怪的事情(对象通过静态物体落下等)
我想,暂时将它转换为静态刚体可能会起作用,但是在Bullet的方面是否存在一种现有的"原生"方式来实现这一点?
编辑:有没有办法关闭特定对象的重力?
我目前正在研究一种游戏"引擎",它需要在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)
我想创建一个与某个父子关系中的另一个类相关联的类.为此,"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<>实例处于无效状态),有没有办法实现这一点?
我使用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
我注意到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卷积层,但如果使用常规版本会有明显的影响吗?
在具有多个网卡的计算机上,我需要将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".
有任何想法吗?
我正在尝试创建一个面向对象的模型来包装OpenAL,并且在理解设备,缓冲区和上下文时遇到一些问题.
从我在程序员指南中可以看到,有多个设备,每个设备可以有多个上下文以及多个缓冲区.每个上下文都有一个监听器,alListener*()所有函数都在活动上下文的监听器上运行.(这意味着如果我想改变它的倾听者,我必须首先激活另一个上下文,如果我做对了.)到目前为止,那么好.令我恼火的是,我需要将设备传递给alcCreateContext()函数,但没有alGenBuffers().
这怎么工作呢?当我打开多个设备时,在哪个设备上创建了缓冲区?缓冲区是否在所有设备之间共享?如果我关闭所有打开的设备,缓冲区会发生什么?
(或者我错过了什么?)
我刚刚阅读了GCC函数属性,artificial但没有完全得到描述.你能给我一些有用的例子吗?
tensorflow ×3
c++ ×2
android ×1
attributes ×1
audio ×1
binding ×1
bullet ×1
c ×1
casting ×1
class ×1
game-physics ×1
gcc ×1
interface ×1
networking ×1
openal ×1
physics ×1
this ×1
wcf ×1
web-services ×1