При создании модели Sequential()
определено, что она поддерживает любой размер пакета. В частности, в TensorFlow 1.*
вход является заполнителем, который имеет None
в качестве первого измерения:
import tensorflow as tf
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(units=2, input_shape=(2, )))
print(model.inputs[0].get_shape().as_list()) # [None, 2] <-- supports any batch size
print(model.inputs[0].op.type == 'Placeholder') # True
Если вы используете tf.keras.InputLayer()
, вы можете определить фиксированный размер партии следующим образом:
import tensorflow as tf
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.InputLayer((2,), batch_size=50)) # <-- same as using batch_input_shape
model.add(tf.keras.layers.Dense(units=2, input_shape=(2, )))
print(model.inputs[0].get_shape().as_list()) # [50, 2] <-- supports only batch_size==50
print(model.inputs[0].op.type == 'Placeholder') # True
Размер пакета метода model.fit()
используется для разделения данных на пакеты. Например, если вы используете InputLayer()
и определяете фиксированный размер пакета, предоставляя другое значение размера пакета для метода model.fit()
, вы получите ValueError
:
import tensorflow as tf
import numpy as np
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.InputLayer((2,), batch_size=2)) # <--batch_size==2
model.add(tf.keras.layers.Dense(units=2, input_shape=(2, )))
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss='categorical_crossentropy')
x_train = np.random.normal(size=(10, 2))
y_train = np.array([[0, 1] for _ in range(10)])
model.fit(x_train, y_train, batch_size=3) # <--batch_size==3
Это поднимет:
ValueError: The
batch_size argument value 3 is incompatible with the specified batch size of your Input Layer: 2
Подводя итог: если вы определите размер партии None
, вы можете передать любое количество образцов для обучения или оценки, даже все образцы сразу, без разделения на партии (если данные слишком велики, вы получите OutOfMemoryError
) , Если вы определите фиксированный размер партии, вам придется использовать тот же фиксированный размер партии для обучения и оценки.