TensorFlow.NET TensorFrlow.Keras GRU:创建 GRU-lauer 会出现 NullReferenceException

问题描述 投票:0回答:1

我正在尝试使用 TensorFlow.NET 构建我的第一个 RNN,但出现错误。

这是我的代码:

Tensors input = tf.keras.Input(shape: new Shape(1, InputVectorSize));
ILayer gruLayer = tf.keras.layers.GRU(units: 32, return_sequences: false, stateful: true);
// NullReferenceException deep inside the Apply function
gruLayer.Apply(input);

这就是堆栈的样子:

in Tensorflow.Binding.isinstance(Object Item1, Type Item2)
in Tensorflow.OpDefLibrary._apply_op_helper(String op_type_name, String name, Dictionary2 keywords)
in Tensorflow.Contexts.Context.ExecGraphAction(String OpType, String Name, ExecuteOpArgs args)
in Tensorflow.Contexts.Context.ExecuteOp(String opType, String name, ExecuteOpArgs args)
in Tensorflow.math_ops.<>c__DisplayClass67_0.<matmul>b__0(NameScope scope)
in Tensorflow.Binding.tf_with[TIn,TOut](TIn py, Func2 action)
in Tensorflow.math_ops.matmul(Tensor a, Tensor b, Boolean transpose_a, Boolean transpose_b, Boolean adjoint_a, Boolean adjoint_b, Boolean a_is_sparse, Boolean b_is_sparse, String name)
in Tensorflow.Keras.Layers.GRUCell.Call(Tensors inputs, Tensors states, Nullable1 training, IOptionalArgs optional_args)
in Tensorflow.Keras.Engine.Layer.Apply(Tensors inputs, Tensors states, Nullable1 training, IOptionalArgs optional_args)
in Tensorflow.Keras.Layers.GRU.<>c__DisplayClass28_0.<Call>b__0(Tensors cell_inputs, Tensors cell_states)
in Tensorflow.Keras.BackendImpl.rnn(Func3 step_function, Tensors inputs, Tensors initial_states, Boolean go_backwards, Tensor mask, Tensors constants, Boolean unroll, Tensors input_length, Boolean time_major, Boolean zero_output_for_mask, Boolean return_all_outputs)
in Tensorflow.Keras.Layers.GRU.Call(Tensors inputs, Tensors initial_state, Nullable1 training, IOptionalArgs optional_args)
in Tensorflow.Keras.Engine.Layer.FunctionalConstructionCall(Tensors inputs)
in Tensorflow.Keras.Engine.Layer.Apply(Tensors inputs, Tensors states, Nullable1 training, IOptionalArgs optional_args)
in Tensorflow.Keras.Layers.RNN.Apply(Tensors inputs, Tensors initial_states, Nullable1 training, IOptionalArgs optional_args)

我还没有真正尝试过任何事情来自行解决问题。 我期望 rnn-layer 获得一维形状作为输入,但令我惊讶的是,当

stateful: true
时,它需要 2D 形状,当
stateful: false
时,它需要 3D 形状。看来我必须传递比单个数据点向量更复杂的东西。

那么我该如何解决这个问题以及如何更好地实现它呢?如果有任何建议,我将不胜感激!

c# .net-8.0 tensorflow.net
1个回答
0
投票

我做了几个步骤来解决这个问题。

首先,我尝试在没有状态标志的情况下运行它,并且使用很少的输入向量而不是一个,如下所示:

张量输入 = tf.keras .输入(形状:新形状(8,InputVectorSize));

张量 gruLayer = tf.keras.layers .GRU(单位:32,return_sequences:false) .应用(输入); // <- Error: "Unable to find an entry point named 'TF_GetHandleShapeAndType' in DLL 'tensorflow'."

张量输出 = tf.keras.layers .Dense(信号输出向量大小) .应用(gruLayer);

模型 = tf.keras.Model(输入,输出);

然后我得到了一些新的异常:“无法在 DLL 'tensorflow' 中找到名为 'TF_GetHandleShapeAndType' 的入口点。”。 我尝试删除 GPU 后端包并安装 CPU。 它有效,我可以使用 GRU 层构建模型!

现在我在装修时遇到了一些麻烦,但又一个障碍过去了。

© www.soinside.com 2019 - 2024. All rights reserved.