Измените плоские векторы с Керасом и R для CNN - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь сделать CNN для классификации ЭЭГ.Мой набор данных состоит из 4320 наблюдений.Каждое наблюдение представляет собой плоский вектор из 1440 столбцов.Он состоит из 8 электродов сигнала 180 мс $ \ left (8 * 180 = 1440 \ right) $ .

Я хотел бы использовать 1D сверточную нейронную сеть эта статья , это объясняет, как сделать 1D CNN на питоне, используя Keras.Но я бы хотел сделать это с помощью R.

Я столкнулся с проблемой, когда хочу изменить свой сигнал.Думаю, мне нужно изменить форму набора данных с 4320 * 1440 до 4320 * 180 * 8, но я не знаю, как этого добиться.Я попробовал функцию x <- k_reshape(train.x, c(180,8)), но я получил следующую ошибку:

Error in py_call_impl(callable, dots<span class="math-container">$args, dots$</span>keywords) : 
TypeError: Failed to convert object of type <type 'dict'> to Tensor. Contents: {'C4_086': 31.419, etc...

Есть идеи?

1 Ответ

0 голосов
/ 06 февраля 2019

Хорошо, я использовал не ту функцию.Чтобы изменить плоский вектор, нужно использовать layer_reshape в качестве первого макета.

Вот моя сеть в качестве примера:

num_time_periods = 180
num_sensors = 8
input_shape = num_sensors*num_time_periods

model = keras_model_sequential()
model %>%
  layer_reshape(c(num_time_periods, num_sensors), input_shape = input_shape) %>%
  layer_conv_1d(100, 10, activation = 'relu', input_shape = input_shape) %>%
  layer_conv_1d(100, 10, activation = 'relu', input_shape = input_shape) %>%
  layer_max_pooling_1d(8) %>%
  layer_conv_1d(160, 10, activation = 'relu') %>%
  layer_conv_1d(160, 10, activation = 'relu') %>%
  layer_global_average_pooling_1d() %>%
  layer_dropout(0.5) %>%
  layer_dense(2, activation = 'softmax')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...