1

시퀀스 (다차원 데이터 스트림)를 분류하는 순환 네트워크를 구축하려고합니다. 난 내 코드를 실행하는 동안 때문에, 뭔가 빠진해야합니다Keras : 반복 네트워크의 올바른 데이터 형식은 무엇입니까?

from keras.models import Sequential 
from keras.layers import LSTM, Dropout, Activation 
import numpy as np 

ils = 10   # input layer size 
ilt = 11   # input layer time steps 
hls = 12   # hidden layer size 
nhl = 2    # number of hidden layers 
ols = 1    # output layer size 
p = 0.2    # dropout probability 
f_a = 'relu'  # activation function 
opt = 'rmsprop'  # optimizing function 

# 
# Building the model 
# 
model = Sequential() 

# The input layer 
model.add(LSTM(hls, input_shape=(ilt, ils), return_sequences=True)) 
model.add(Activation(f_a)) 
model.add(Dropout(p)) 

# Hidden layers 
for i in range(nhl - 1): 
    model.add(LSTM(hls, return_sequences=True)) 
    model.add(Activation(f_a)) 
    model.add(Dropout(p)) 

# Output layer 
model.add(LSTM(ols, return_sequences=False)) 
model.add(Activation('softmax')) 

model.compile(optimizer=opt, loss='binary_crossentropy') 

# 
# Making test data and fitting the model 
# 

m_train, n_class = 1000, 2 
data = np.array(np.random.random((m_train, ilt, ils))) 
labels = np.random.randint(n_class, size=(m_train, 1)) 


model.fit(data, labels, nb_epoch=10, batch_size=32) 

I 출력 (절단)을 얻을 :

Using Theano backend. 
line 611, in __call__ 
     node = self.make_node(*inputs, **kwargs) 
     File "/home/koala/.local/lib/python2.7/site-packages/theano/scan_module/scan_op.py", line 430, in make_node 
     new_inputs.append(format(outer_seq, as_var=inner_seq)) 
     File "/home/koala/.local/lib/python2.7/site-packages/theano/scan_module/scan_op.py", line 422, in format 
     rval = tmp.filter_variable(rval) 
     File "/home/koala/.local/lib/python2.7/site-packages/theano/tensor/type.py", line 233, in filter_variable 
     self=self)) 
    TypeError: Cannot convert Type TensorType(float32, 3D) (of Variable Subtensor{:int64:}.0) into Type TensorType(float32, (False, False, True)). You can try to manually convert Subtensor{:int64:}.0 into a TensorType(float32, (False, False, True)). 

는 모든 데이터 형식이 문제입니다.

+0

어떤 Keras 버전을 사용합니까? 최신 버전 -이 코드는 내 컴퓨터에서 작동합니다. –

+0

Keras v1.0.6; 테아 노 v0.8.2. 아직이 일을하지 못했습니다. –

+0

최종 레이어에서 'softmax'를 'sigmoid'로 변경하십시오. –

답변

0

내 실제 데이터 세트에서 시도해 보았을 때 문제가 해결되었습니다. 차이점은 실제 데이터 세트에는 1 개 이상의 라벨이 있습니다. 따라서이 코드가 작동하는 데이터 세트의 예는 다음과 같습니다.

(...) 
ols = 2 # Output layer size 
(...) 

m_train, n_class = 1000, ols 
data = np.array(np.random.random((m_train, ilt, ils))) 
labels = np.random.randint(n_class, size=(m_train, 1)) 
# Make labels onehot 
onehot_labels = np.zeros(shape=(labels.shape[0], ols)) 
onehot_labels[np.arange(labels.shape[0]), labels.astype(np.int)] = 1 
관련 문제