Использование извилистых слоев в нейронных сетях - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь использовать слой Conv1D в качестве входного слоя в моей нейронной сети на Keras, который, как я понимаю, является слоем временной свертки. Я понимаю, что он принимает входные данные и использует размер ядра (с набором функций) для создания нового сложного слоя. Мои тренировочные данные являются длинным горячим закодированным тензором длины 231. Я изо всех сил пытаюсь понять, как / что является входом слоя Conv1D?

Мой x_train.shape([1]) равен 231.

Когда я использую:

n_cols = x_train.shape([1])

model.add(Conv1D(128, 11, activation = 'relu', input_shape = (n_cols,)))

(я использую 11, потому что, насколько я понимаю, я получаю 11 значений из одного горячего вектора за один раз)

Я получаю сообщение об ошибке:

ValueError: Input 0 of layer conv1d is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 231]

Полная трассировка:

Traceback (most recent call last):
  File "/Volumes/Hajar's     HDD/MSc_data/large_proteins/ml_network.py", line 18, in <module>
        model.add(Conv1D(128, 11, activation = 'relu', input_shape     = (n_cols,)))
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/training/tracking/base.py", line 456, in     _method_wrapper
    result = method(self, *args, **kwargs)
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/keras/engine/sequential.py", line 169, in     add
    layer(x)
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/keras/engine/base_layer.py", line 589, in     __call__
    self.name)
  File "/anaconda3/lib/python3.7/site-    packages/tensorflow/python/keras/engine/input_spec.py", line 124, in     assert_input_compatibility
    str(x.shape.as_list()))

Я пытался изменить размер ядра, но все равно получаю ту же ошибку. Я думаю, может быть, мне нужен еще один входной слой раньше. Для размера ядра, это число функций, то есть 231?

1 Ответ

1 голос
/ 17 апреля 2019

Вам потребуется ввести shape=(231, x ), где x - это второе измерение.Вы можете попробовать использовать x = 1, например:

import numpy as np

n_cols = x_train.shape([1])
x_train = np.reshape( x_train , ( -1 , n_cols , 1 )  )

model.add(Conv1D(128, 11, activation = 'relu', input_shape = (n_cols,1)))

Conv1D требует двумерных входных данных в форме (batch_size, a, b ), где a и b - ненулевые измерения.

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