python - 张量流。Batch Tensor 修改一个条目(张量)
问题描述
我正在关注这个例子:https ://www.tensorflow.org/tutorials/structured_data/time_series 。
就我而言,我有一个传感器,每小时收集一次数据。在过去的几个月里,这个并不可靠,我丢失了一些数据。为解决此问题,已将这些值替换为以前的有效值。我得到了许多重复的值,我认为这就是我的 NN 无法预测任何东西的原因。我不想在创建数据集之前跳过错误的值,因为它会创建没有连续值的时间序列。
我想像示例中一样创建时间序列数据集,然后删除在数据中具有一定重复性的条目/输出(张量)或使用值 0 更新张量值。
def hasMultipleDuplicatedElements (mylist, multiplicity):
return Counter(mylist[:,0]).most_common(1)[0][1] >multiplicity
WindowGenerator.hasMultipleDuplicatedElements = hasMultipleDuplicatedElements
def dsCleanedRowsWithHighMultiplycity(self,ds,multiplicity):
for batch in ds:
dataBatch=batch.numpy()
for j in range (len (dataBatch)):
selectedDataBatch=dataBatch[j]
indices = tf.constant([[j] for j in range(len(selectedDataBatch))])
inputData =(selectedDataBatch[:self.input_width])
labelData= (selectedDataBatch[self.input_width:])
if ( hasMultipleDuplicatedElements(inputData,multiplicity) or
( hasMultipleDuplicatedElements(labelData,multiplicity) )):
#print(batch[j])
tf.tensor_scatter_nd_update(batch[j], indices,
tf.zeros(shape=selectedDataBatch.shape,dtype=tf.float32),
name=None)
#print(batch[j])
WindowGenerator.dsCleanedOfRowsWithHighMultipliciy = dsCleanedOfRowsWithHighMultipliciy
def make_dataset(self, data):
data = np.array(data, dtype=np.float32)
ds = tf.keras.preprocessing.timeseries_dataset_from_array(
data=data,
targets=None,
sequence_length=self.total_window_size,
sequence_stride=1,
shuffle=True,
batch_size=32,)
self.dsCleanedRowsWithHighMultiplycity(ds,10)
ds = ds.map(self.split_window)
return ds
数据集包含批次,每个批次有 32 个条目/输出(张量)。我扫描每个条目/输出以查找重复数据,至少 10 次。我设法发现了这些条目并使用 tf.tensor_scatter_nd_update 创建了一个新的张量,但我想要更新批处理中的原始张量。
如果有办法从批次中删除错误的张量,这也是一个可以接受的解决方案。
提前致谢!
解决方案
推荐阅读
- java - 错误:int 无法转换为布尔值
- arrays - 如何在具有相同属性值的对象旁边插入数组中的对象
- javascript - 当我看不到浏览器进行任何交互时,看到量角器黄瓜测试通过是否正确?
- python - Python Pandas如何计算至少有一个零的行数
- hibernate - JPA @Version - 为什么在尝试更新已删除的实体时乐观锁定不起作用?
- javascript - 是否可以使用 jQuery 将 cookie 从一个域传递到另一个域?
- r - 通过过滤不等于 R 中的值的子集来创建多个数据帧
- ansible - 如何使用 Ansible 启动远程 Windows 服务
- javascript - 如何在不按继续按钮的情况下自动在 Surveyjs 中滑动问题?
- r - 格式化来自 lubridate 的 as.period() 的输出