Модель ожидает партию / список образцов. Вы можете сделать это, просто установив пакетное свойство при создании набора данных следующим образом:
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
function
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])))
Вышеуказанные изменения предоставят только одну партию (образец для первого решения) для каждой эпохи вашего набора данных. Вы можете сгенерировать столько пакетов (выборок для первого решения), сколько захотите (например, 25), передав параметр в функцию data_generator
, пока вы определяете свой набор данных следующим образом:
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])))