TensorFlow生成时序数据时输出形状受限,如何扩大数组尺寸?
解决Keras时序数据集张量尺寸扩大问题
为什么当前张量形状是(128, 10000)
tf.keras.utils.timeseries_dataset_from_array默认batch_size=128,所以第一个维度是批量大小;你的输入是一维数据(每个时间步只有1个特征),每个样本是长度为10000的序列,最终张量形状就是(batch_size, sequence_length),也就是(128, 10000)。
如何扩大数组尺寸
1. 调整批量大小(batch_size)
直接在函数中指定更大的batch_size参数,就能让第一个维度的尺寸变大:
import tensorflow as tf import random input_data = [random.uniform(10,100) for _ in range(350000)] targets = [random.uniform(10,100) for _ in range(350000)] # 按需设置更大的batch_size,比如256 dataset = tf.keras.utils.timeseries_dataset_from_array( input_data, targets, sequence_length=10000, batch_size=256) for batch in dataset: inputs, targets = batch print(inputs.shape) # 输出(256, 10000) break
2. 增加输入特征维度
如果需要每个时间步包含多个特征,把输入数据改成二维数组(形状为(样本数, 特征数)),生成的张量会增加特征维度,整体尺寸随之扩大:
import tensorflow as tf import random import numpy as np # 生成每个时间步有3个特征的输入数据 input_data = np.random.uniform(10,100, size=(350000, 3)) targets = [random.uniform(10,100) for _ in range(350000)] dataset = tf.keras.utils.timeseries_dataset_from_array( input_data, targets, sequence_length=10000, batch_size=128) for batch in dataset: inputs, targets = batch print(inputs.shape) # 输出(128, 10000, 3) break
相关限制
- 内存限制:张量尺寸越大,占用的CPU/GPU内存越多。比如float32类型下,形状为(256,10000,3)的张量,内存占用约30MB(256100003*4字节),若batch_size或特征数过大,会触发内存不足(OOM)错误,需根据硬件配置合理调整。
- 数据集长度限制:生成的时序样本数为
len(input_data) - sequence_length + 1,如果输入数据长度不足,样本总数会减少,最后一个批量的大小可能小于指定的batch_size(可通过drop_remainder=True强制丢弃不完整批量)。
内容的提问来源于stack exchange,提问作者utkarsh saraf
相关产品推荐
相关产品推荐

