当前位置: 首页 > 面试题库 >

如何使用Tensorflow 1.0 Java API创建/初始化变量

慕通
2023-03-14
问题内容

我正在尝试移植以下Python代码行:

my_var = tf.Variable(3, name="input_a")

Java。我能够通过tf.constant这种方式做到这一点:

graph.opBuilder("Const", name)
        .setAttr("dtype", tensorVal.dataType())
        .setAttr("value", tensorVal).build()
        .output(0);

我尝试使用类似的变量方法:

graph.opBuilder("Variable", name)
        .setAttr("dtype", tensorVal.dataType())
        .setAttr("shape", shape)
        .build()
        .output(0);

但我得到这个错误:

Exception in thread "main" java.lang.IllegalStateException: Attempting to use uninitialized value input_a
[[Node: input_a/_2 = _Send[T=DT_INT32, client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_5_input_a", _device="/job:localhost/replica:0/task:0/cpu:0"](input_a)]]

我想我需要使用该值设置一个特殊的属性,或者以后需要对其进行初始化。但是我找不到路。

我计划对大多数其他tf方法执行相同的操作(这是我目前的工作)。所以我想了解如何自己提出答案。例如,通过查看以下Python来源:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/variable_scope.py


https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/state_ops.py

我怀疑我应该分配“ initializer”属性,但是java
API或initialize方法中没有Initializer接口。尚未实施?我是tensorflow和Python的新手。


问题答案:

与您一样,我使用了assigntensorflow节点将值分配给变量。因此,首先需要按照您的方式定义节点,然后需要为该节点添加相应的值。然后,我稍后在图形中引用此新分配的节点,因此它不会引发错误java.lang.IllegalStateException: Attempting to use uninitialized value

我使用GraphBuilder类扩展了Graph功能,并添加了以下必需的类:

class GraphBuilder(g: Graph ) {
  def variable(name: String, dataType: DataType, shape: Shape): Output = {
    g.opBuilder("Variable", name)
      .setAttr("dtype", dataType)
      .setAttr("shape", shape)
      .build()
      .output(0)
  }

  def assign(value: Output, variable: Output): Output = {
      graph.opBuilder("Assign", "Assign/" + variable.op().name()).addInput(variable).addInput(value).build().output(0)
  }
}

val WValue = Array.fill(numFeatures)(Array.fill(hiddenDim)(0.0))
val W = builder.variable("W", DataType.DOUBLE, Shape.make(numFeatures, hiddenDim))
val W_init = builder.assign(builder.constant("Wval", WValue), W)

分配 ,所以它不适合培训,或节点将在每个直传分配与预先设定值的变量。但是无论如何,从这篇文章看来,您似乎需要添加依赖项,因为默认情况下,JAVA
API不提供训练节点:https :
//github.com/tensorflow/tensorflow/issues/5518。



 类似资料:
  • 使用具有以下初始化的创建的等效版本是什么?

  • 我使用FFMPEG-segment对桌面上的视频捕获进行分段,并通过网络发送它们,以便提供给客户,并使用dash.js播放。问题是播放器正在搜索初始化段,而我似乎不知道如何创建它。 我使用以下ffmpeg命令创建段: 我为流创建的清单如下所示: 播放机调试模式打印以下内容: 如何为生成的段创建初始化段?我似乎无法让它起作用。

  • 因为我是android开发新手,所以我不知道如何在使用lateinit变量之前初始化它。在此之前,我尝试过执行,就像这个github中提到的,但没有成功。所以现在我希望问题出在初始化textInput变量上。

  • 当训练模型时,用变量来存储和更新参数。变量包含张量 (Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。 本文档描述以下两个TensorFlow类。点击以下链接可查看完整的API文档: tf.Variable 类 tf.train.Saver 类 创建 当创建一个变量时,你将一个张量作为初始值传入构造函数Va

  • 问题内容: 我有以下代码: 这给了我以下错误: 解析错误:语法错误,在第19行的/home/user/Sites/site/registration/inc/registration.class.inc中出现意外的’(’,期待’)’ 所以,我想我做错了什么…但是如果不那样做怎么办?如果我用常规字符串更改mktime内容,它将起作用。所以,我知道我能做到这一点 的那种 像.. 有人有指针吗? 问题答

  • 当训练模型时,用变量来存储和更新参数。变量包含张量 (Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。 本文档描述以下两个TensorFlow类。点击以下链接可查看完整的API文档: tf.Variable 类 tf.train.Saver 类 创建 当创建一个变量时,你将一个张量作为初始值传入构造函数Va