2017-06-01 181 views
1

運行Keras LSTM模型時,出現上述錯誤。下面是該模型的要點是:Keras LSTM:TypeError:難以置信的類型:'numpy.ndarray'

inp = Input(shape=(170,200)) 
out = LSTM(25, activation='relu')(inp) 
main_out = Dense(4, activation='sigmoid')(out) 
model = Model(inputs = [inp], outputs = [main_out]) 
# optimizer, model.fit etc. etc. 
model.fit([img_data, ], [y_train], 
        epochs=500, batch_size=1, callbacks = callbacks, 
        verbose=1, validation_split=0.1) 

我輸入的250套170個矢量的列表,每個長度200的形狀似乎是正確的:

X.shape = (170, 200, 250) 

然而,當我運行模型,我得到

Traceback (most recent call last): 
    File "lstm_trials.py", line 62, in <module> 
    model = Model(inputs = [inp], outputs = [main_out]) 
    File ".../keras/legacy/interfaces.py", line 88, in wrapper 
    return func(*args, **kwargs) 
    File ".../keras/engine/topology.py", line 1485, in __init__ 
    inputs_set = set(self.inputs) 
TypeError: unhashable type: 'numpy.ndarray' 

怎麼回事?

+0

檢查[此答案如果有幫助](https://stackoverflow.com/questions/9022656/typeerror-unhashable-type-numpy-ndarray)。 –

回答

0

我相信你的輸入數據img_data有錯誤type()或形狀。我沒有成功地嘗試用以下在Keras 2.0.4上順利運行的代碼片段重現您的錯誤。請將其輸入數據格式與您的數據進行比較,以找出確切的錯誤來源。

import numpy as np 

from keras import optimizers, losses 
from keras.models import Model 
from keras.layers import Input, Dense, LSTM 
from keras.utils import to_categorical 

# Generate dummy data 
n_classes = 4 
im_height = 170 
im_width = 200 
n_training_examples = 250 
img_data = np.random.random(size=(n_training_examples, im_height, im_width)) 
y_train = to_categorical(
    y=np.random.randint(n_classes, size=(n_training_examples, 1)), 
    num_classes=n_classes) 

inp = Input(shape=(im_height, im_width)) 
out = LSTM(units=25, activation='relu')(inp) 
main_out = Dense(units=n_classes, activation='softmax')(out) 
model = Model(inputs=[inp], outputs=[main_out]) 
model.compile(optimizer=optimizers.sgd(), 
       loss=losses.categorical_crossentropy) 
model.fit(x=[img_data], y=[y_train], 
      epochs=5, batch_size=10, verbose=1, validation_split=0.2)