Кажется, есть проблема с распределенным кодом keras.
Если вы посмотрите на
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-c812209b95d0> in <module>()
8
9 # Use Talos to scan the best hyperparameters of the Keras model
---> 10 scan_object = ta.Scan(x_train, y_train, params=p, model=iris_model, experiment_name='test', x_val=x_val, y_val=y_val, fraction_limit=0.1)
8 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py in _distribution_standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, validation_split, shuffle, epochs, allow_partial_batch)
2307 strategy) and not drop_remainder:
2308 dataset_size = first_x_value.shape[0]
-> 2309 if dataset_size % batch_size == 0:
2310 drop_remainder = True
2311
TypeError: unsupported operand type(s) for %: 'int' and 'NoneType'
, вы увидите, что ошибка возникает при операции "dataset_size% batch_size" и в нем говорится «неподдерживаемые типы операндов для%: 'int' и 'NoneType'". Это означает, что в этот момент переменная batch_size должна быть уже выведена из объекта набора данных, но она по-прежнему 'Нет'
Если вы посмотрите на исходный код (вы можете получить к нему доступ из коллаба, нажав на путь), вы увидите, что в функции подгонки
def fit(self,
model,
x=None,
y=None,
batch_size=None,
epochs=1,
verbose=1,
callbacks=None,
validation_split=0.,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None,
initial_epoch=0,
steps_per_epoch=None,
validation_steps=None,
validation_freq=1,
**kwargs):
"""Fit loop for Distribution Strategies."""
dist_utils.validate_callbacks(input_callbacks=callbacks,
optimizer=model.optimizer)
dist_utils.validate_inputs(x, y)
batch_size, steps_per_epoch = dist_utils.process_batch_and_step_size(
model._distribution_strategy,
x,
batch_size,
steps_per_epoch,
ModeKeys.TRAIN,
validation_split=validation_split)
batch_size = model._validate_or_infer_batch_size(
batch_size, steps_per_epoch, x)
dataset = model._distribution_standardize_user_data(
есть шаг
batch_size = model._validate_or_infer_batch_size(
batch_size, steps_per_epoch, x)
, в котором batch_size должен измениться с 'None' (значение по умолчанию, если оно не указано) ) к тому, который выведен из объекта набора данных (но это не так, я проверил, напечатав переменную). Я думаю, что это может быть связано с тем, что ваш batch_size на самом деле является списком batch_size. Если вы измените исходный код (вы можете напрямую отредактировать его из collab, а затем попытаться перезапустить среду выполнения, чтобы попробовать) на это:
batch_size, steps_per_epoch = dist_utils.process_batch_and_step_size(
model._distribution_strategy,
x,
batch_size,
steps_per_epoch,
ModeKeys.TRAIN,
validation_split=validation_split)
batch_size = model._validate_or_infer_batch_size(
batch_size, steps_per_epoch, x)
batch_size = 128
dataset = model._distribution_standardize_user_data(
(см., Что я вручную вставил batch_size в исходный код после того, как точка, в которой это должно было быть выведено) программа работает без ошибок.
Возможно, факт использования разных batch_sizes для настройки параметров - это функция, которая просто неосуществима в этих текущих версиях. Я пробовал tf 2.1 и тоже не работал.