2016-06-28 5 views
-1

У меня есть 3D NumpyArray, который я хочу пропустить в нейронной сети Keras.3D-массив numpy в Theano

Из-за одной горячей кодировки массив стал трехмерным массивом.

[ 
    [[0,1,0,0], [1,0,0,0]], 
    [[0,0,0,1], [1,1,0,0]], 
    [[0,0,1,0], [0,0,0,1]] 
    ] 

С Keras может только вычислить 2D массивы, мой вопрос, как я могу уменьшить размерность и использовать его в sequencial keras NN?

В настоящее время я получаю ошибку:

TypeError: ('Bad input argument to theano function with name "D:\\Python27\\lib\\site-packages\\keras\\backend\\theano_backend.py:503" at index 0(0-based)', 'Wrong number of dimensions: expected 2, got 3 with shape (32L, 10L, 12L).') 
+0

Пожалуйста, после того, что вы хотите 2D-массив, чтобы быть (и использовать ряд цифры, а не только 0s и 1s, поэтому мы можем увидеть уникальное решение, которое вы хотите). – tom10

+0

Я использую одну горячую кодировку. Нет смысла в более высоком диапазоне чисел. – AlcuPala

ответ

0

Вы можете использовать numpy.ndarray.flatten, чтобы превратить его в 1D массив. Пример:

import numpy as np 
a = np.array(
    [ 
     [[0, 1, 0, 0], [1, 0, 0, 0]], 
     [[0, 0, 0, 1], [1, 1, 0, 0]], 
     [[0, 0, 1, 0], [0, 0, 0, 1]] 
    ] 
    ) 
a.flatten() 

Исходя из этого, если вы хотите, чтобы разбить его на строки, я бы рекомендовал делать

import numpy as np 
a = np.array(
    [ 
     [[0, 1, 0, 0], [1, 0, 0, 0]], 
     [[0, 0, 0, 1], [1, 1, 0, 0]], 
     [[0, 0, 1, 0], [0, 0, 0, 1]] 
    ] 
    ) 
a = map(np.ndarray.flatten, a) 
+0

Спасибо, но Теано просто ест 2D-массивы. – AlcuPala