Tensorflow 2“ InaccessibleTensorError”中的错误子类化模型

奋斗的学生42

背景

我的问题基于Geron的动手机器学习第12章:定制模型中的示例

本示例的目的是创建一个定制的神经网络模型。该模型有5个Dense隐藏层。自定义部分是我们reconstruction在输出之前添加一个图层。重建层的目的是重建输入。然后,我们求出差值reconstruction-inputs,得到MSE,然后将此值应用于损失函数。这应该是一个正规化步骤。

最低(应为)工作示例

以下代码几乎直接来自教科书,但无效。

import numpy as np

num_training=10;
num_dim=2;

X = np.random.random((10,2))
y = np.random.random(10)

import tensorflow as tf
import tensorflow.keras as keras

class ReconstructingRegressor(keras.models.Model):
    def __init__(self, output_dim, **kwargs):
        super().__init__(**kwargs)
        self.hidden = [keras.layers.Dense(30, activation="selu",
                                          kernel_initializer="lecun_normal")
                       for _ in range(5)]
        self.out = keras.layers.Dense(output_dim)

    def build(self, batch_input_shape):
        n_inputs = batch_input_shape[-1]
        self.reconstruct = keras.layers.Dense(n_inputs)
        super().build(batch_input_shape)

    def call(self, inputs, training=None):
        Z = inputs
        for layer in self.hidden:
            Z = layer(Z)
        reconstruction = self.reconstruct(Z)
        recon_loss = tf.reduce_mean(tf.square(reconstruction - inputs))
        self.add_loss(0.05 * recon_loss)
        return self.out(Z)
    
model = ReconstructingRegressor(1)
model.compile(loss="mse", optimizer="nadam")
history = model.fit(X, y, epochs=2)

错误信息

但是,在调用时出现以下错误model.fit()

---------------------------------------------------------------------------
InaccessibleTensorError                   Traceback (most recent call last)
<ipython-input-10-b7211d3022fa> in <module>
     34 model = ReconstructingRegressor(1)
     35 model.compile(loss="mse", optimizer="nadam")
---> 36 history = model.fit(X, y, epochs=2)

并且,在错误消息的末尾:

InaccessibleTensorError:无法在此处访问张量'Tensor(“ mul:0”,shape =(),dtype = float32)':它是在另一个函数或代码块中定义的。使用返回值,显式的Python局部变量或TensorFlow集合来访问它。定义于:FuncGraph(name = build_graph,id = 140602287140624); 可从以下网址访问:FuncGraph(name = train_function,id = 140602287108640)。

故障排除

如果我注释掉计算损失的代码,即

        #recon_loss = tf.reduce_mean(tf.square(reconstruction - inputs))
        #self.add_loss(0.05 * recon_loss)

在中call,但我将其他所有内容保持不变,则收到以下警告

警告:tensorflow:最小化损耗时,变量['dense / kernel:0','dense / bias:0']不存在渐变。

不确定是否相关。

莱斯库雷尔

我不确定100%,但是我认为问题是由于您添加通孔self.add_loss所涉及的损耗是指在计算主损耗时未使用的层,并且可能在主图中进行了优化。因此,当您要访问它们时,就无法访​​问张量。

我认为最简单的方法是稍微改写网络:

使用的training参数model.call,我们设置为reconstruct仅在训练期间使用该图层,并使网络返回机器人进行预测和重构。但是,当我们要进行预测时,仅返回预测。

覆盖train_step只是在这里仍然可以使用fit,而不必从头开始编写训练循环。test_step在这种情况下,我们不需要重写,因为用例相当简单。

import tensorflow as tf
import tensorflow.keras as keras
import numpy as np

num_training = 10
num_dim = 2

X = np.random.random((10, 2)).astype(np.float32)
y = np.random.random((10,)).astype(np.float32)


class ReconstructingRegressor(keras.models.Model):
    def __init__(self, output_dim, **kwargs):
        super().__init__(**kwargs)
        self.hidden = [
            keras.layers.Dense(
                30,
                activation="selu",
                kernel_initializer="lecun_normal",
                name=f"hidden_{idx}",
            )
            for idx in range(5)
        ]
        self.out = keras.layers.Dense(output_dim, name="output")

    def build(self, batch_input_shape):
        n_inputs = batch_input_shape[-1]
        self.reconstruct = keras.layers.Dense(n_inputs, name="reconstruct")
        super().build(batch_input_shape)

    @staticmethod
    def reconstruction_loss(reconstruction, inputs, rate=0.05):
        return tf.reduce_mean(tf.square(reconstruction - inputs)) * rate

    def train_step(self, data):
        x, y = data
        with tf.GradientTape() as tape:
            y_pred, recon = self(x, training=True)
            loss = self.compiled_loss(y, y_pred)
            loss += self.reconstruction_loss(recon, x)
        gradients = tape.gradient(loss, self.trainable_variables)

        # Update weights
        self.optimizer.apply_gradients(zip(gradients, self.trainable_variables))

        # Update metrics (includes the metric that tracks the loss)
        self.compiled_metrics.update_state(y, y_pred)
        # Return a dict mapping metric names to current value
        return {m.name: m.result() for m in self.metrics}

    def call(self, inputs, training=None):
        Z = inputs
        for layer in self.hidden:
            Z = layer(Z)
        if training:
            return self.out(Z), self.reconstruct(Z)

        return self.out(Z)


model = ReconstructingRegressor(1)

model.compile(optimizer="nadam", loss="mse")
history = model.fit(X, y, epochs=10)
history = model.evaluate(X, y)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TensorFlow2-模型子类化ValueError

来自分类Dev

Tensorflow 2 Keras嵌套模型子类化-总参数为零

来自分类Dev

Tensorflow模型子类化多输入

来自分类Dev

Swift 2中的Parse.com子类化

来自分类Dev

将tensorflow 1.xx模型加载到tensorflow 2.xx中

来自分类Dev

在Tensorflow 2中导入WAV文件

来自分类Dev

在tensorflow 2中加载ModelCheckpoint

来自分类Dev

Tensorflow 中孪生模型中子类的共享权重

来自分类Dev

如何在TensorFlow 2.x中加载Tensorflow 1.x保存的模型?

来自分类Dev

GKGraph错误地计算了带有GKGraphNode2D子类化节点的路径

来自分类Dev

Tensorflow 2:如何从保存的模型连接两层?

来自分类Dev

具有tensorflow 2的Sagemaker无法保存模型

来自分类Dev

在OpenCV上使用Tensorflow 2.X模型

来自分类Dev

Tensorflow端口模型从1.x到2.x

来自分类Dev

关于具有2个特征的Tensorflow分类模型的问题

来自分类Dev

Tensorflow 2 LSTM模型无法使用序列学习

来自分类Dev

使用 Cleverhans 的 CarliniWagnerL2 攻击 Tensorflow 模型导致 NotImplementedError

来自分类Dev

使用CPU的“ Keras后端+ Tensorflow”和“来自Tensorflow的Keras”之间有什么区别(在Tensorflow 2.x中)

来自分类Dev

如何在tensorflow中为word2vec模型提供特定的单词

来自分类Dev

在tensorflow 2中将keras功能模型转换为keras类

来自分类Dev

如何在预训练的TensorFlow 2模型中访问和可视化权重?

来自分类Dev

如何在Jupyter中将TensorFlow 2模型的结果保存到文本文件中?

来自分类Dev

如何避免在Tensorflow 2中为CTC损失模型定义目标张量?

来自分类Dev

如何仅在Tensorflow2中保存张量而不是模型

来自分类Dev

当LoginView是初始视图时,在情节提要中对UITabBarController进行子类化[Swift2,Xcode 7]

来自分类Dev

在Tensorflow 2中找不到Tensorflow模块,在哪里可以找到新方法的文档?

来自分类Dev

在TensorFlow v1中隐式启用TensorFlow v2行为

来自分类Dev

Tensorflow 2:嵌套TensorArray

来自分类Dev

当运行yad2k生成模型h5文件时,tensorflow 2.3的'tensorflow'没有属性'space_to_depth'错误

Related 相关文章

  1. 1

    TensorFlow2-模型子类化ValueError

  2. 2

    Tensorflow 2 Keras嵌套模型子类化-总参数为零

  3. 3

    Tensorflow模型子类化多输入

  4. 4

    Swift 2中的Parse.com子类化

  5. 5

    将tensorflow 1.xx模型加载到tensorflow 2.xx中

  6. 6

    在Tensorflow 2中导入WAV文件

  7. 7

    在tensorflow 2中加载ModelCheckpoint

  8. 8

    Tensorflow 中孪生模型中子类的共享权重

  9. 9

    如何在TensorFlow 2.x中加载Tensorflow 1.x保存的模型?

  10. 10

    GKGraph错误地计算了带有GKGraphNode2D子类化节点的路径

  11. 11

    Tensorflow 2:如何从保存的模型连接两层?

  12. 12

    具有tensorflow 2的Sagemaker无法保存模型

  13. 13

    在OpenCV上使用Tensorflow 2.X模型

  14. 14

    Tensorflow端口模型从1.x到2.x

  15. 15

    关于具有2个特征的Tensorflow分类模型的问题

  16. 16

    Tensorflow 2 LSTM模型无法使用序列学习

  17. 17

    使用 Cleverhans 的 CarliniWagnerL2 攻击 Tensorflow 模型导致 NotImplementedError

  18. 18

    使用CPU的“ Keras后端+ Tensorflow”和“来自Tensorflow的Keras”之间有什么区别(在Tensorflow 2.x中)

  19. 19

    如何在tensorflow中为word2vec模型提供特定的单词

  20. 20

    在tensorflow 2中将keras功能模型转换为keras类

  21. 21

    如何在预训练的TensorFlow 2模型中访问和可视化权重?

  22. 22

    如何在Jupyter中将TensorFlow 2模型的结果保存到文本文件中?

  23. 23

    如何避免在Tensorflow 2中为CTC损失模型定义目标张量?

  24. 24

    如何仅在Tensorflow2中保存张量而不是模型

  25. 25

    当LoginView是初始视图时,在情节提要中对UITabBarController进行子类化[Swift2,Xcode 7]

  26. 26

    在Tensorflow 2中找不到Tensorflow模块,在哪里可以找到新方法的文档?

  27. 27

    在TensorFlow v1中隐式启用TensorFlow v2行为

  28. 28

    Tensorflow 2:嵌套TensorArray

  29. 29

    当运行yad2k生成模型h5文件时,tensorflow 2.3的'tensorflow'没有属性'space_to_depth'错误

热门标签

归档