Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras LSTM输入尺寸设置_Python_Tensorflow_Deep Learning_Keras_Lstm - Fatal编程技术网

Python Keras LSTM输入尺寸设置

Python Keras LSTM输入尺寸设置,python,tensorflow,deep-learning,keras,lstm,Python,Tensorflow,Deep Learning,Keras,Lstm,我试着用keras来训练LSTM模型,但我想我搞错了 我犯了一个错误 ValueError:检查输入时出错:预期lstm_17_输入具有 3维,但得到了具有形状的数组(10000,0,20) 虽然我的代码看起来像 model = Sequential() model.add(LSTM(256, activation="relu", dropout=0.25, recurrent_dropout=0.25, input_shape=(None, 20, 64))) model.add(Dense(

我试着用keras来训练LSTM模型,但我想我搞错了

我犯了一个错误

ValueError:检查输入时出错:预期lstm_17_输入具有 3维,但得到了具有形状的数组(10000,0,20)

虽然我的代码看起来像

model = Sequential()
model.add(LSTM(256, activation="relu", dropout=0.25, recurrent_dropout=0.25, input_shape=(None, 20, 64)))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          metrics=['accuracy'])
model.fit(X_train, y_train,
      batch_size=batch_size,
      epochs=10)
其中,
X\u列车
的形状为
(10000,20)
,前几个数据点如下

array([[ 0,  0,  0, ..., 40, 40,  9],
   [ 0,  0,  0, ..., 33, 20, 51],
   [ 0,  0,  0, ..., 54, 54, 50],
...
y\u列
的形状为
(10000,)
,是一个二进制(0/1)标签数组


有人能指出我错在哪里吗?

为了完整起见,这里是发生的事情

首先,
LSTM
与Keras中的所有层一样,接受两个参数:
input\u-shape
batch\u-input\u-shape
。不同之处在于,按照惯例,
input\u shape
不包含批次大小,而
batch\u input\u shape
是包含批次大小的完整输入形状

因此,规范
input\u shape=(None,20,64)
告诉keras需要一个四维输入,这不是您想要的。正确的答案应该是
(20,)

但这还不是全部。LSTM层是一个循环层,因此它需要一个三维输入
(批大小、时间步长、输入尺寸)
。这就是为什么正确的规范是
input\u-shape=(20,1)
batch\u-input\u-shape=(10000,20,1)
。另外,您的训练数组也应该重新调整,以表示每个步骤都有
20
时间步和
1
输入功能

因此,解决方案是:

X_-train=np.扩展_-dims(X_-train,2)#使其成为(10000,20,1)
...
模型=顺序()
添加(LSTM(…,input_shape=(20,1)))

你说的是
input\u shape=(无,20,64)
但是你的输入只有两个维度
(10000,20)
?@AndreHolzner我曾经尝试设置input\u shape=(10000,20),但运气不好。错误为ValueError:检查输入时出错:预期lstm_28_输入为3维,但得到了形状为(10000,20)的数组。请尝试设置
输入_形状=(无,20,1)
,并将输入大小调整为
(10000,20,1)
。例如,如果您的输入在numpy数组中,请使用@AndreHolzner刚刚尝试过。获得了一个训练np.array,大小为(10000,20,1)。但是,仍然存在一个错误,表示维度不匹配。然后我将输入大小更改为(20,1),现在可以工作了!亲爱的先生,我送你很多爱。