LSTM Keras ValueError:设置一个具有序列的数组元素,并且预期将看到1个数组

时间:2018-08-07 19:40:59

标签: arrays keras lstm

我正在运行具有以下规格的模型。此外,这是通过anaconda提示符在虚拟笔记本电脑中运行的。

# Import packages
from keras.models import Sequential
from keras.layers import Dense, Activation, LSTM, Flatten
from keras.preprocessing.sequence import pad_sequences
import tensorflow as tf
import pandas as pd
import numpy as np


seq=[]
lag_seq=[]
for i in range(100):
    list1=list()
    list2=list()
    for a in range(10):
        list1.append((a))
    for b in range(9):
        list2.append(b)

    seq.append(list1)
    lag_seq.append(list2)

seq=pd.Series(data=seq)
lag_seq=pd.Series(data=lag_seq)
data=seq.to_frame('SEQ')
data.insert(loc=1, column='LAG_SEQ',value=lag_seq)

targets=np.vstack((np.ones((50,2)), np.zeros((50,2))))
np.random.shuffle(targets)


trainX=data[0:70].values
trainY=data[0:70].values
testX=data[70:100].values
testY=data[70:100].values

trainX =np.reshape(trainX, (trainX.shape[0],trainX.shape[1],1))
testX = np.reshape(testX, (testX.shape[0],testX.shape[1],1))

print(trainX.shape, trainY.shape, testX.shape, testY.shape)

model = Sequential()
model.add(LSTM(64,return_sequences=True,stateful=True,
           batch_input_shape=(1,2,1)))
model.add(Flatten())
model.add(Dense(2, activation='softmax'))
model.compile(optimizer='adam',metrics=['accuracy'],
         loss='categorical_crossentropy')

# Fit the Model
history = model.fit(list(trainX),trainY, epochs=20,verbose=0,shuffle=False,batch_size=(10))

我也尝试在拟合时传递数组列表,并得到以下错误。

检查模型输入时出错:传递给模型的Numpy数组列表不是模型期望的大小。预计会看到1个数组,但得到了以下1000个数组的列表:[array([[list(['1','9','11','10','3','9' ,'7','7','23',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0、0 ......

如果我未将trainX放在列表中,则会出现此错误: ValueError:设置具有序列的数组元素

有什么建议可以解决吗?

2 个答案:

答案 0 :(得分:0)

如果trainY是用keras的to_categorical进行的一键编码,则 在model.fit中,使用

np.array(trainY) 

代替

trainY

答案 1 :(得分:0)

您检查数据是int还是float?如果有对象。就像错误一样。

因此,您需要通过df.dtypes进行检查。

print(data.dtypes)