python - 如何创建一个继承自 tf.Tensor 的新类?
问题描述
我想创建一个基本上是数组但具有一些额外属性的新类。
具体来说,我想编写一个基于 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。因此,仅创建一个属性为张量的类更有意义。
我现在将其标记为已回答。
解决方案
TFTimeSeries
当你实例化你的 tf_ts 对象时,你没有传递 op、value_index 和 dtype 作为参数。
如果您尝试以相同的方式实例化,则会引发相同的错误tf.Tensor()
。
关于如何实现您的TFTimeSeries
课程,tf.Variable
并且tf.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)
推荐阅读
- excel - 选择和删除组内的行
- html - 内容适合窗口
- python - 如何从 python 子进程执行 netcat 命令?
- reactjs - ref.current.onSnapshot 不是函数
- asp.net - 如何在 Stimulsoft Report 中为图像设置圆角?
- javascript - @aws-sdk/lib-storage 使用 JSONStream.stringify() 将 JSON 从 MongoDB 流式传输到 S3
- asp.net-mvc - 解耦 ASP.NET Core 项目的 SSR 表示层
- python - 正则表达式在多行上搜索文本
- flutter - TypeError:无法读取 null 的属性(读取 'getAllPostsRep')bloc cubit 颤动
- airflow - Airflow 2 Push Xcom 带键名