TensorFlow Federated: как я могу написать входную Spe c для модели с более чем одним входом - PullRequest
1 голос
/ 04 апреля 2020

Я пытаюсь создать модель субтитров для изображений, используя интегрированную обучающую библиотеку, предоставляемую tenorflow, но я застрял в этой ошибке

Input 0 of layer dense is incompatible with the layer: : expected min_ndim=2, found ndim=1.

это мой input_spe c:

input_spec=collections.OrderedDict(x=(tf.TensorSpec(shape=(2048,), dtype=tf.float32), tf.TensorSpec(shape=(34,), dtype=tf.int32)), y=tf.TensorSpec(shape=(None), dtype=tf.int32))

Модель использует функции изображения в качестве первого ввода и список словарного запаса в качестве второго ввода, но я не могу express это в переменной input_spe c. Я попытался выразить это как список списков, но он все еще не работал. Что я могу попробовать дальше?

1 Ответ

1 голос
/ 12 апреля 2020

Отличный вопрос! Мне кажется, что эта ошибка возникает из-за правильного TensorFlow - это указывает на то, что у вас, вероятно, правильная вложенная структура, но листья могут быть выключены. Ваше входное значение c выглядит так, как будто «должно работать» с точки зрения TFF, поэтому, вероятно, оно немного не соответствует имеющимся у вас данным

Первое, что я бы попробовал - если у вас есть пример tf.data.Dataset, который будет передан вашему клиентскому вычислению, вы можете просто прочитать input_spec непосредственно из этого набора данных как атрибут element_spec . Это будет выглядеть примерно так:

# ds = example dataset
input_spec = ds.element_spec

Это самый простой путь. Если у вас есть что-то вроде «списков списков numpy массивов», у вас все еще есть способ извлечь эту информацию из самих данных - вам поможет следующий фрагмент кода:

# data = list of list of numpy arrays
input_spec = tf.nest.map_structure(lambda x: tf.TensorSpec(x.shape, x.dtype), data)

Наконец, если у вас есть список списков tf.Tensors, TensorFlow предоставляет аналогичную функцию:

# tensor_structure = list of lists of tensors
tf.nest.map_structure(tf.TensorSpec.from_tensor, tensor_structure)

Короче, я бы рекомендовал не , указав input_spec вручную, а вместо того, чтобы позволить данным сказать вам, какой должна быть их входная величина c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...