1 回答
TA贡献1877条经验 获得超6个赞
模型需要一批/样本列表。您可以通过在创建数据集时简单地设置批处理属性来做到这一点,如下所示:
ds = tf.data.Dataset.from_generator(data_generator, output_types=(tf.float32, tf.int32),
output_shapes=(tf.TensorShape([100, 3]), tf.TensorShape([5])))
ds = ds.batch(16)
您也可以在准备样品时采用另一种方式。这样,您需要扩展样本维度,以便样本充当批次(您也可以传递样本列表)并且您必须在output_shapes数据集和create_timeseries_element函数中进行以下修改
def create_timeseries_element():
# returns a random time series of 100 intervals, each with 3 features,
# and a random one-hot array of 5 entries
# Expand dimensions to create a batch of single sample
data = np.expand_dims(np.random.rand(100, 3), axis=0)
label = np.expand_dims(np.eye(5, dtype='int')[np.random.choice(5)], axis=0)
return data, label
ds = tf.data.Dataset.from_generator(data_generator, output_types=(tf.float32, tf.int32), output_shapes=(tf.TensorShape([None, 100, 3]), tf.TensorShape([None, 5])))
上述更改将为数据集的每个时期仅提供一个批次(第一个解决方案的样本)。您可以通过在定义数据集时将参数传递给data_generator函数来生成所需的批次(第一个解决方案的样本)(例如 25 个),如下所示:
def data_generator(count=1):
for _ in range(count):
d, l = create_timeseries_element()
yield (d, l)
ds = tf.data.Dataset.from_generator(data_generator, args=[25], output_types=(tf.float32, tf.int32), output_shapes=(tf.TensorShape([None, 100, 3]), tf.TensorShape([None, 5])))
添加回答
举报
