Сложность с формой ввода набора данных в 1D Conv слой - PullRequest
0 голосов
/ 03 октября 2019

Первый слой моей сети - это Conv1D следующим образом:

Conv1D(128, 9, activation='relu', input_shape=(100, 28))

Мои входные данные состоят из элементов с входной формой (100, 28). т.е. мой набор данных состоит из n из этих элементов, каждый с меткой. Метки представляют собой одноразовые массивы длиной 15.

. Вывод .element_spec в моем наборе данных дает:

(TensorSpec(shape=(100, 28), dtype=tf.float32, name=None),
 TensorSpec(shape=(15,), dtype=tf.int32, name=None))

Это выглядит согласованно, но при запуске .fit () на модели это даетошибка:

Error when checking input: expected conv1d_18_input to have 3 dimensions, but got array with shape (100, 28)

Что я здесь не так делаю? Кстати, это TensorFlow 2.0.

Редактировать: Если я перейду через tf-код, кажется, что он ожидает (None, 100, 28), но это кажется мне неправильным. Каждый элемент, представленный на слое (100, 28). «Нет», безусловно, просто означает, что оно вызывается много раз. Кроме того, вы не можете указать (None, 100, 28) как input_shape для слоя, или он жалуется, что ему нужны только два измерения, а не три!

Большое спасибо,

Джулиан

1 Ответ

0 голосов
/ 05 октября 2019

Мое недоразумение здесь было с Dataset. Мой набор данных сам по себе имеет отдельные элементы (100,28). Мне нужно было применить .batch (32) к набору данных. Это производит (Нет, 100,28), что является тем, что требуется. Выходные данные .element_spec для этого пакетного набора данных:

<class 'tuple'>: (TensorSpec(shape=(None, 100, 3), dtype=tf.float32, name=None), TensorSpec(shape=(None, 5), dtype=tf.int32, name=None))

Это то, что нужно 1D Convnet для ввода.

...