None
означает, что это динамическая форма.Может принимать любое значение в зависимости от выбранного размера партии.
Когда вы определяете модель по умолчанию, она определяется для поддержки любого размера партии, который вы можете выбрать.Вот что означает None
.В TensorFlow 1.*
вход для вашей модели является экземпляром tf.placeholder()
.
Если вы не используете keras.InputLayer()
с указанным размером партии, вы получите первое измерение 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]
print(model.inputs[0].op.type == 'Placeholder') # True
Когда вы используете keras.InputLayer()
с указанной партиейРазмер вы можете определить входной заполнитель с фиксированным размером пакета:
import tensorflow as tf
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.InputLayer((2,), batch_size=50))
model.add(tf.keras.layers.Dense(units=2, input_shape=(2, )))
print(model.inputs[0].get_shape().as_list()) # [50, 2]
print(model.inputs[0].op.type == 'Placeholder') # True
Когда вы указываете размер пакета для метода model.fit()
, эти входные заполнители уже определены, и вы не можете изменить их форму.Размер пакета для model.fit()
используется только для разделения предоставленных вами данных на партии.
Если вы определяете свой входной слой с размером пакета 2
, а затем передаете другое значение размера пакета в 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