小编Sev*_*ren的帖子

神经网络中的 Q 学习 - Mountain Car

所以我一直在阅读有关 Q 学习和神经网络的内容。我相信我对此有正确的想法,但我想对我的 NN 代码和 Q 值更新有第二意见。

我已经创建了山车问题和我的神经网络的 MatLab 实现,我正在使用神经网络工具箱来处理 NN 部分。

它是一个由 2 个输入、5-20 个隐藏层(用于实验)和 3 个输出(对应山地车中的动作)组成的网络

隐藏单元设置为 tansig,输出为 purelin,训练函数为 traingdm

这是正确的步骤吗?

  1. 获得初始状态 s -> [-0.5; 0.0]
  2. 使用 Qs=net(s) 运行网络...这给了我一个 1x3 Q 值矩阵,对应于初始状态 s 中的每个动作。
  3. 使用 e-greedy 选择选择一个动作 a
  4. 模拟山车并获得s'(执行动作a的结果的新状态)
  5. 使用 Qs_prime=net(s') 运行网络以获得 s' 的 Q 值的另一个矩阵

现在我不确定这是否正确,因为我必须弄清楚如何正确更新神经网络的权重。

  1. 计算 QTarget,即 = 奖励+gamma* s' 的最大 Q 值?
  2. 使用初始 s 中的 Q 值创建一个目标矩阵(1x3),并将执行操作 a 的相应 Q 值更改为 QTarget
  3. 使用 net=Train(net,s,Targets) 更新神经网络中的权重
  4. s=s'
  5. 对新的 s 重复上述所有操作

例子:

       actions
        1       2      3
Qs …
Run Code Online (Sandbox Code Playgroud)

matlab artificial-intelligence machine-learning neural-network q-learning

5
推荐指数
1
解决办法
4092
查看次数

增加Smali中的本地寄存器并使用新的寄存器

您好,我想了解如何在 smali 虚拟方法中正确增加寄存器。为了注入将使用新寄存器的代码

作为参考,我已经阅读了以下内容:https://github.com/JesusFreke/smali/wiki/Registers

这是我的java代码:

    public void toastMsg(String msg) {

        Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();

    }
Run Code Online (Sandbox Code Playgroud)

在 Smali 中它看起来像这样

.method public toastMsg(Ljava/lang/String;)V
    .locals 2

    const/4 v0, 0x1

    .line 26
    invoke-static {p0, p1, v0}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object p1

    const/4 v0, 0x0

    const/16 v1, 0x11

    .line 27
    invoke-virtual {p1, v1, v0, v0}, Landroid/widget/Toast;->setGravity(III)V

    .line 28
    invoke-virtual {p1}, Landroid/widget/Toast;->show()V

    return-void
.end method
Run Code Online (Sandbox Code Playgroud)

现在据我了解,上面的 toastMsg 方法的 smali 代码片段总共包含 4 个寄存器。

.locals = 2 + 1 表示对象(this),1 表示 toastMsg 方法的参数(String …

android logcat smali

5
推荐指数
1
解决办法
5228
查看次数

使用 google.protobuf.Timestamp 在 Go 中解析带有时区偏移的日期时间戳

我正在创建一个将使用 GRPC 和 protobuf 的 Go 应用程序。我的 RPC 服务将获取包含 type 的消息google.protobuf.Timestamp,对其进行解析并最终将其保存在数据库中或对其执行更多操作。

我对什么被认为是类型的有效输入感到困惑google.protobuf.Timestamp。我希望对带有时区偏移的日期时间戳使用以下格式。

2019-02-15T13:00:00+01:00

这是我正在使用的原型文件。

syntax = "proto3"
package example;
import "google/protobuf/timestamp.proto"

service Tester {
 rpc ParseDateTimeStamp(TSRequest) returns (TSReply) {}
}

message TSRequest {
  google.protobuf.Timestamp dts = 1;
}

message TSReply {
 string message = 1;
}
Run Code Online (Sandbox Code Playgroud)

问题是当我向 GRPC 服务器发送包含日期时间戳的消息时。我希望给定的日期时间戳*tsbp.Timestamp的类型2019-02-15T13:00:00+01:00是有效的,并给我相应的纪元秒数。GetSeconds()(从timestamp.go调用后)

调用上面示例输入的ptypes.TimestampString(ts *tspb.Timestamp)返回值。1970-01-01T00:00:00Z

是否google.protobuf.Timestamp接受带有 +- 偏移量的日期时间戳?

或者我是否必须输入 String 类型,然后解析为time.Timewithtime.Format而不是使用 protobuf 中的时间戳变量类型?如果是这样,您能提供一个例子吗?

go protocol-buffers grpc-go

3
推荐指数
1
解决办法
7200
查看次数