如何提取TensorFlow BatchDataset特征最大值并更新对应特征与标签
TensorFlow BatchDataset 特征与标签最大值叠加处理方案
你可以通过两种方式实现需求,最终输出的数据集均保持BatchDataset类型:
方案1:预处理原始数据后生成数据集(推荐,逻辑更清晰)
直接对原始特征、标签做最大值叠加计算,再生成时间序列数据集,完整可运行代码如下:
import tensorflow as tf import numpy as np simple_features = np.array([ [1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 5], [6, 6, 6], [7, 7, 7], [8, 8, 8], [9, 9, 9], [10, 10, 10], [11, 11, 11], [12, 12, 12], ]) simple_labels = np.array([ [-1, -1], [-2, -2], [-3, -3], [-4, -4], [-5, -5], [-6, -6], [-7, -7], [-8, -8], [-9, -9], [-10, -10], [-11, -11], [-12, -12], ]) def print_dataset(ds): for inputs, targets in ds: print("---Batch---") print("Feature:", inputs.numpy()) print("Label:", targets.numpy()) print("") # 核心处理逻辑:计算每个特征样本的最大值,通过广播机制叠加到特征和对应标签 per_feature_max = np.max(simple_features, axis=1, keepdims=True) processed_features = simple_features + per_feature_max processed_labels = simple_labels + per_feature_max # 生成BatchDataset类型的时间序列数据集 ds = tf.keras.preprocessing.timeseries_dataset_from_array(processed_features, processed_labels, sequence_length=4, batch_size=32) # 验证输出 print_dataset(ds) # 验证数据集类型 print(type(ds)) # 输出:<class 'tensorflow.python.data.ops.dataset_ops.BatchDataset'>
方案2:直接对已生成的BatchDataset做处理
如果已经生成了原始数据集,可以通过map方法对批次数据做逐样本计算:
# 原始数据集生成代码不变 ds = tf.keras.preprocessing.timeseries_dataset_from_array(simple_features, simple_labels, sequence_length=4, batch_size=32) def process_batch(x, y): # 计算每个时间步特征的最大值,维度为 (batch_size, sequence_length, 1) batch_max = tf.reduce_max(x, axis=-1, keepdims=True) # 特征叠加对应最大值 x_new = x + batch_max # 标签叠加对应窗口最后一个时间步的特征最大值 y_new = y + batch_max[:, -1, :] return x_new, y_new processed_ds = ds.map(process_batch) # 验证数据集类型 print(type(processed_ds)) # 输出:<class 'tensorflow.python.data.ops.dataset_ops.BatchDataset'>
内容的提问来源于stack exchange,提问作者freak11
相关产品推荐
相关产品推荐

