【问题标题】:How I create a new class that inherits from tf.Tensor?如何创建一个继承自 tf.Tensor 的新类?
【发布时间】:2020-05-11 16:42:01
【问题描述】:

我想创建一个新类,它基本上是一个数组,但有一些额外的属性。

具体来说,我想编写一个基于 Tensorflow 对象的类,它将描述时间序列数据。因此,它将具有相关的时间间隔 (delta_t) 和时间向量 我用sample_times 属性制作的。

在 python/numpy 中,我执行以下操作

import numpy as np
class TimeSeries(object):
    def __init__(self, initial_array, delta_t):
        self.initial_array = initial_array
        self.delta_t = delta_t

    @property
    def sample_times(self):
        return np.arange(self.initial_array.shape[0]) * self.delta_t

是否可以通过从 tf.Tensor 继承来做类似的事情? 这样做的原因是我相信它会让生活变得更简单 对这些 TimeSeries 对象进行分析,我可以利用 各种 tensorflow 的东西,比如 tf.function 装饰器。

我对最小工作示例的基本尝试如下,只是尝试成为 tf.Tensor 的子类。

import tensorflow as tf

class TFTimeSeries(tf.Tensor):
    def __init__(self):
        super().__init__()

tf_ts = TFTimeSeries()

实例化TFTimeSeries时出现以下错误

TypeError: __init__() missing 3 required positional arguments: 'op', 'value_index', and 'dtype'

dtype 很简单,但其他两个:'op' 和 'value_index' 我不知道该怎么办。

我应该说我对 tensorflow 的了解并不是很先进,如果能提供任何帮助,我将不胜感激!

编辑:

您好@Filippo Grazioli,感谢您的回答!我认为这是最好的前进方式。在考虑了我的代码设计之后,我认为它不像我想的那样非常适合 Tensorflow。所以只创建一个属性为张量的类更有意义。

我现在将其标记为已回答。

【问题讨论】:

    标签: python tensorflow tensorflow2.0


    【解决方案1】:

    实例化 tf_ts 对象时,您没有将 op、value_index 和 dtype 作为 TFTimeSeries 的参数传递。

    如果您尝试以相同方式实例化 tf.Tensor(),则会引发相同的错误。

    关于如何实现 TFTimeSeries 类,tf.Variabletf.costant 可能是有趣的类。

    这是他们的文档: tf.Variable, tf.costant

    这是一个解释它们之间差异的问题: TensorFlow Variables and Constants

    我不确定我是否正确理解了您需要做什么,但这可能是一个起点:

    import tensorflow as tf  
    import numpy as np
    
    class TimeSeries(object):
        def __init__(self, initial_array, dt):
            self.tensor = tf.Variable(initial_array, dtype=tf.float32)
            self.dt = dt
            self.initial_array = initial_array 
    
        def sample_times(self):
            self.tensor = tf.Variable(np.arange(self.initial_array.shape[0]) * self.dt, dtype=tf.float32)
    

    【讨论】:

    • 嗨@Filippo Grazioli,感谢您的回答!我认为这是最好的前进方式。在考虑了我的代码设计之后,我认为它不像我想的那样非常适合 Tensorflow。因此,仅创建一个属性为张量的类更有意义
    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多