我如何创建一个继承自 tf.Tensor 的新 class?
How I create a new class that inherits from tf.Tensor?
我想创建一个新的 class,它基本上是一个数组,但有一些额外的属性。
具体来说,我想基于 Tensorflow 对象编写一个 class,它将描述时间序列数据。因此,它将具有关联的时间间隔 (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 对象执行分析
各种张量流的东西,比如 tf.function
装饰器。
我对最小工作示例的基本尝试如下,只是尝试成为 tf.Tensor 的子class。
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。所以只做一个 class 其中属性是张量更有意义。
我现在将此标记为已回答。
当您实例化您的 tf_ts 对象时,您没有将 op、value_index 和 dtype 作为 TFTimeSeries
的参数传递。
如果您尝试以相同的方式实例化 tf.Tensor()
,则会抛出相同的错误。
关于如何实施您的 TFTimeSeries
class、tf.Variable
和 tf.costant
可能很有趣 classes.
这是他们的文档:
tf.Variable, tf.costant
这里有一个问题解释了它们的区别:
我不确定我是否正确理解了您需要做什么,但这可能是一个起点:
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)
我想创建一个新的 class,它基本上是一个数组,但有一些额外的属性。
具体来说,我想基于 Tensorflow 对象编写一个 class,它将描述时间序列数据。因此,它将具有关联的时间间隔 (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 对象执行分析
各种张量流的东西,比如 tf.function
装饰器。
我对最小工作示例的基本尝试如下,只是尝试成为 tf.Tensor 的子class。
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。所以只做一个 class 其中属性是张量更有意义。
我现在将此标记为已回答。
当您实例化您的 tf_ts 对象时,您没有将 op、value_index 和 dtype 作为 TFTimeSeries
的参数传递。
如果您尝试以相同的方式实例化 tf.Tensor()
,则会抛出相同的错误。
关于如何实施您的 TFTimeSeries
class、tf.Variable
和 tf.costant
可能很有趣 classes.
这是他们的文档: tf.Variable, tf.costant
这里有一个问题解释了它们的区别:
我不确定我是否正确理解了您需要做什么,但这可能是一个起点:
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)