检查输入时出错:预期 lstm_input 有 3 个维度,但得到形状为 (160, 1000) 的数组
Error when checking input: expected lstm_input to have 3 dimensions, but got array with shape (160, 1000)
当我尝试将 RNN 模型与我的数据集一起使用时出现此错误。这是我的模型和数据集的精简版,但它产生的错误完全相同 - dropbox.com/sh/1a2guzsk4afp94r/AACkOQ1UibLZAhzGoyZJtVcqa?dl=0
训练数据由每 1000 个浮点数长的浮点数列表组成。例如,
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. 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. 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. 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. 0. 0. 0. 0. 0. 0. 0.55 0.2 0.5 0.85 0.8 0.2
0.2 1. 0.2 0.2 0.5 0.75 0.3 0.5 0.5 0.3 0.85 0.65 0.15 0.4
0.3 0.6 0.05 0.15 0.85 0.5 0.45 0.45 0.05 0.25 0.5 0.45 0.05 0.1
0.45 0.9 0.35 0.35 0.65 0.15 0.45 0.3 0.3 0.6 0.2 0.2 0.05 0.55
0.45 0.75 0.5 0.5 1. 0.5 1. 0.6 0.45 0.05 0.45 0.4 0.05 0.05
0.8 0.05 0.85 0.85 0.8 0.7 0.9 0.65 0.2 1. 0.3 0.85 0.8 0.7
0.95 0.2 0.7 0.95 0.95 0.2 0.2 0.25 0.6 0.7 0.3 0.25 0.15 0.2
0.7 0.15 0.5 0.35 0.1 0.15 0.2 0.2 0.5 0.2 0.65 0.8 0.15 0.6
0.2 0.2 0.2 0.6 0.65 0.05 0.3 0.8 0.7 0.05 0.65 0.3 0.8 0.7
0.05 0.85 0.65 0.65 0.45 0.45 0.65 0.75 0.85 0.8 0.65 0.15 0.25 0.65
0.2 0.9 0.5 0.45 0.2 1. 0.9 0.8 0.6 0.05 0.5 0.25 0.85 0.6
0.75 0.85 1. 0.6 0.1 0.25 0.4 0.4 0.25 0.85 0.85 0.05 0.2 0.45
0.3 0.45 0.2 0.5 1. 0.65 0.1 0.4 0.7 0.05 0.05 1. 0.45 0.1
0.85 0.25 0.4 0.05 0.5 1. 0.55 1. 0.6 0.3 0.15 0.8 0.9 0.5
1. 0.4 0.4 0.85 0.9 0.3 0.45 0.35 0.75 0.9 0.6 0.05 0.55 0.2
0.6 0.5 0.1 0.8 0.45 0.45 0.1 0.85 0.9 0.8 0.25 0.5 0.7 0.05
0.45 0.3 0.9 0.5 0.45 0.65 0.7 0.2 0.05 1. 0.6 0.9 0.1 0.1
0.85 0.25 0.2 0.5 0.4 0.8 0.7 0.6 0.4 0.7 0.3 0.3 0.5 0.65
0.8 0.8 0.25 0.25 0.6 0.65 0.9 0.7 0.2 0.2 0.2 0.45 0.8 0.9
0.6 0.95 0.45 0.5 0.4 0.8 0.2 0.25 0.05 0.1 0.8 0.4 0.45 0.1
0.85 0.15 0.65 0.5 0.5 0.5 0.55 0.05 0.5 1. 0.5 0.2 0.25 0.85
0.85 0.05 0.65 0.2 0.05 0.1 0.45 0.9 0.1 0.15 0.6 0.65 0.75 0.75
0.5 0.2 0.35 0.75 0.75 0.35 0.35 0.85 0.45 0.15 0.35 0.85 0.5 0.6
0.05 0.5 0.5 0.25 0.7 0.15 0.8 0.45 0.85 0.7 0.45 0.85 0.4 0.1
0.6 0.7 0.05 0.1 0.15 0.85 0.9 0.5 0.05 0.45 0.75 0.75 0.5 0.15
0.55 0.45 0.85 0.5 0.85 0.75 0.6 0.2 0.5 0.5 0.9 0.7 0.75 0.95
0.7 0.3 0.5 0.25 0.7 0.2 0.55 0.2 0.15 0.5 0.25 0.3 0.05 0.75
0.3 0.2 0.2 0.35 0.5 0.05 0.35 0.75 0.55 0.05 0.05 0.9 0.55 0.95
0.5 0.6 0.05 0.5 0.35 0.65 0.6 0.55 0.65 0.15 0.9 0.4 0.25 0.6
1. 0.4 0.45 0.55 0.9 0.9 0.2 0.6 0.45 0.65 0.45 0.7 0.75 1.
0.5 0.5 0.5 0.45 0.3 0.65 0.9 0.6 0.1 0.3 0.45 0.85 0.85 0.9
0.05 0.05 0.3 0.5 0.4 0.3 0.5 0.1 0.3 0.3 0.05 1. 0.5 0.6
0.4 0.6 0.1 0.65 0.65 0.2 0.75 0.5 0.05 0.25 0.2 0.5 0.3 0.55
0.05 0.4 0.15 0.7 0.25 0.85 0.9 0.9 0.25 0.2 0.15 0.9 0.45 0.3
0.45 0.45 0.8 0.8 0.45 0.8 0.8 0.5 0.7 0.85 0.3 0.4 0.3 0.25
0.2 0.6 0.5 0.15 0.6 0.5 0.75 0.15 0.35 0.5 0.15 0.3 0.05 0.9
0.65 0.9 0.6 0.5 0.2 0.75 0.45 0.35 0.7 0.6 0.45 0.9 0.85 0.7
0.4 0.25 0.65 0.65 0.3 0.4 0.9 0.85 0.1 0.6 0.2 1. 0.15 0.4
0.65 0.5 0.85 0.9 0.45 0.4 0.75 0.55 1. 0.7 0.45 0.9 0.2 0.5
0.5 0.35 0.6 1. 0.6 0.5 1. 0.45 0.8 0.5 0.45 0.6 0.85 0.2
0.2 0.9 0.3 0.45 0.45 0.75 1. 0.5 0.7 0.8 0.3 0.4 0.85 0.95
0.5 0.5 0.5 0.5 0.4 1. 0.25 0.75 0.8 0.9 0.15 0.15 0.25 0.85
0.2 0.45 0.5 0.7 0.2 0.1 0.9 0.9 0.45 0.95 0.45 0.2 0.75 0.4
0.2 0.85 0.2 0.9 0.3 0.15 0.55 0.95 0.5 0.5 0.85 0.55 0.45 0.2
0.6 0.4 0.2 0.7 0.3 0.45 0.6 0.4 0.5 0.2 0.45 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. 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. 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. 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. 0.
0. 0. 0. 0. 0. 0. ]
数据用 0 填充,这样所有序列的长度都是 1000 个元素。
这是我正在使用的模型的代码(如果要下载,请使用 dropbox link)
import numpy as np
from sklearn.utils import shuffle
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM
import numpy as np
def main():
posData = createListOfSequences('PositiveData.txt')
negData = createListOfSequences('NegativeData.txt')
# Shuffle both
np.random.shuffle(posData)
np.random.shuffle(negData)
# Create target lists
PosTargets = [1.0] * len(posData)
NegTargets = [0.0] * len(negData)
# Combine PosData and NegData into 1 list
Sequences = posData + negData
Targets = PosTargets + NegTargets
# shuffle sequences but maintain link to targets
(Sequences, Targets) = shuffle(Sequences, Targets)
# make all sequences 1000 in length
for sequence in Sequences:
sequence = padWithZero(1000, sequence)
Sequences = np.array(Sequences)
Targets = np.array(Targets)
FitModel(Sequences, Targets)
def FitModel(data, target):
trainPercentage = 0.8
splitValue = round(len(data) * trainPercentage)
(x_train, y_train) = data[0:splitValue], target[0:splitValue]
(x_test, y_test) = data[splitValue:len(
data)], target[splitValue:len(target)]
model = Sequential()
model.add(LSTM(128, activation='relu',
input_shape=(1000, 1), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))
def padWithZero(targetLength, sequence):
i = 0
while not(len(sequence) >= targetLength):
if (i % 2 == 0):
sequence.append(0.0)
else:
sequence.insert(0, 0.0)
i += 1
return sequence
def createListOfSequences(dataPath):
DataAsString = []
for line in open(dataPath):
x = line.rstrip()
DataAsString.append((x.split(',')))
ListOfSequences = []
for seq in DataAsString:
listOfFloats = []
for val in seq:
if '.' in val:
listOfFloats.append(float(val))
ListOfSequences.append(listOfFloats)
return(ListOfSequences)
main()
如有任何帮助,我们将不胜感激。谢谢
正如错误信息所说,LSTM 需要 3 个维度的输入。你可以像这样重塑:
x_train = x_train.reshape(x_train.shape[0], 1, x_train.shape[1])
基本上,将形状 (a, b)
变成 (a, 1, b)
。
当我尝试将 RNN 模型与我的数据集一起使用时出现此错误。这是我的模型和数据集的精简版,但它产生的错误完全相同 - dropbox.com/sh/1a2guzsk4afp94r/AACkOQ1UibLZAhzGoyZJtVcqa?dl=0
训练数据由每 1000 个浮点数长的浮点数列表组成。例如,
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. 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. 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. 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. 0. 0. 0. 0. 0. 0. 0.55 0.2 0.5 0.85 0.8 0.2
0.2 1. 0.2 0.2 0.5 0.75 0.3 0.5 0.5 0.3 0.85 0.65 0.15 0.4
0.3 0.6 0.05 0.15 0.85 0.5 0.45 0.45 0.05 0.25 0.5 0.45 0.05 0.1
0.45 0.9 0.35 0.35 0.65 0.15 0.45 0.3 0.3 0.6 0.2 0.2 0.05 0.55
0.45 0.75 0.5 0.5 1. 0.5 1. 0.6 0.45 0.05 0.45 0.4 0.05 0.05
0.8 0.05 0.85 0.85 0.8 0.7 0.9 0.65 0.2 1. 0.3 0.85 0.8 0.7
0.95 0.2 0.7 0.95 0.95 0.2 0.2 0.25 0.6 0.7 0.3 0.25 0.15 0.2
0.7 0.15 0.5 0.35 0.1 0.15 0.2 0.2 0.5 0.2 0.65 0.8 0.15 0.6
0.2 0.2 0.2 0.6 0.65 0.05 0.3 0.8 0.7 0.05 0.65 0.3 0.8 0.7
0.05 0.85 0.65 0.65 0.45 0.45 0.65 0.75 0.85 0.8 0.65 0.15 0.25 0.65
0.2 0.9 0.5 0.45 0.2 1. 0.9 0.8 0.6 0.05 0.5 0.25 0.85 0.6
0.75 0.85 1. 0.6 0.1 0.25 0.4 0.4 0.25 0.85 0.85 0.05 0.2 0.45
0.3 0.45 0.2 0.5 1. 0.65 0.1 0.4 0.7 0.05 0.05 1. 0.45 0.1
0.85 0.25 0.4 0.05 0.5 1. 0.55 1. 0.6 0.3 0.15 0.8 0.9 0.5
1. 0.4 0.4 0.85 0.9 0.3 0.45 0.35 0.75 0.9 0.6 0.05 0.55 0.2
0.6 0.5 0.1 0.8 0.45 0.45 0.1 0.85 0.9 0.8 0.25 0.5 0.7 0.05
0.45 0.3 0.9 0.5 0.45 0.65 0.7 0.2 0.05 1. 0.6 0.9 0.1 0.1
0.85 0.25 0.2 0.5 0.4 0.8 0.7 0.6 0.4 0.7 0.3 0.3 0.5 0.65
0.8 0.8 0.25 0.25 0.6 0.65 0.9 0.7 0.2 0.2 0.2 0.45 0.8 0.9
0.6 0.95 0.45 0.5 0.4 0.8 0.2 0.25 0.05 0.1 0.8 0.4 0.45 0.1
0.85 0.15 0.65 0.5 0.5 0.5 0.55 0.05 0.5 1. 0.5 0.2 0.25 0.85
0.85 0.05 0.65 0.2 0.05 0.1 0.45 0.9 0.1 0.15 0.6 0.65 0.75 0.75
0.5 0.2 0.35 0.75 0.75 0.35 0.35 0.85 0.45 0.15 0.35 0.85 0.5 0.6
0.05 0.5 0.5 0.25 0.7 0.15 0.8 0.45 0.85 0.7 0.45 0.85 0.4 0.1
0.6 0.7 0.05 0.1 0.15 0.85 0.9 0.5 0.05 0.45 0.75 0.75 0.5 0.15
0.55 0.45 0.85 0.5 0.85 0.75 0.6 0.2 0.5 0.5 0.9 0.7 0.75 0.95
0.7 0.3 0.5 0.25 0.7 0.2 0.55 0.2 0.15 0.5 0.25 0.3 0.05 0.75
0.3 0.2 0.2 0.35 0.5 0.05 0.35 0.75 0.55 0.05 0.05 0.9 0.55 0.95
0.5 0.6 0.05 0.5 0.35 0.65 0.6 0.55 0.65 0.15 0.9 0.4 0.25 0.6
1. 0.4 0.45 0.55 0.9 0.9 0.2 0.6 0.45 0.65 0.45 0.7 0.75 1.
0.5 0.5 0.5 0.45 0.3 0.65 0.9 0.6 0.1 0.3 0.45 0.85 0.85 0.9
0.05 0.05 0.3 0.5 0.4 0.3 0.5 0.1 0.3 0.3 0.05 1. 0.5 0.6
0.4 0.6 0.1 0.65 0.65 0.2 0.75 0.5 0.05 0.25 0.2 0.5 0.3 0.55
0.05 0.4 0.15 0.7 0.25 0.85 0.9 0.9 0.25 0.2 0.15 0.9 0.45 0.3
0.45 0.45 0.8 0.8 0.45 0.8 0.8 0.5 0.7 0.85 0.3 0.4 0.3 0.25
0.2 0.6 0.5 0.15 0.6 0.5 0.75 0.15 0.35 0.5 0.15 0.3 0.05 0.9
0.65 0.9 0.6 0.5 0.2 0.75 0.45 0.35 0.7 0.6 0.45 0.9 0.85 0.7
0.4 0.25 0.65 0.65 0.3 0.4 0.9 0.85 0.1 0.6 0.2 1. 0.15 0.4
0.65 0.5 0.85 0.9 0.45 0.4 0.75 0.55 1. 0.7 0.45 0.9 0.2 0.5
0.5 0.35 0.6 1. 0.6 0.5 1. 0.45 0.8 0.5 0.45 0.6 0.85 0.2
0.2 0.9 0.3 0.45 0.45 0.75 1. 0.5 0.7 0.8 0.3 0.4 0.85 0.95
0.5 0.5 0.5 0.5 0.4 1. 0.25 0.75 0.8 0.9 0.15 0.15 0.25 0.85
0.2 0.45 0.5 0.7 0.2 0.1 0.9 0.9 0.45 0.95 0.45 0.2 0.75 0.4
0.2 0.85 0.2 0.9 0.3 0.15 0.55 0.95 0.5 0.5 0.85 0.55 0.45 0.2
0.6 0.4 0.2 0.7 0.3 0.45 0.6 0.4 0.5 0.2 0.45 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. 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. 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. 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. 0.
0. 0. 0. 0. 0. 0. ]
数据用 0 填充,这样所有序列的长度都是 1000 个元素。
这是我正在使用的模型的代码(如果要下载,请使用 dropbox link)
import numpy as np
from sklearn.utils import shuffle
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM
import numpy as np
def main():
posData = createListOfSequences('PositiveData.txt')
negData = createListOfSequences('NegativeData.txt')
# Shuffle both
np.random.shuffle(posData)
np.random.shuffle(negData)
# Create target lists
PosTargets = [1.0] * len(posData)
NegTargets = [0.0] * len(negData)
# Combine PosData and NegData into 1 list
Sequences = posData + negData
Targets = PosTargets + NegTargets
# shuffle sequences but maintain link to targets
(Sequences, Targets) = shuffle(Sequences, Targets)
# make all sequences 1000 in length
for sequence in Sequences:
sequence = padWithZero(1000, sequence)
Sequences = np.array(Sequences)
Targets = np.array(Targets)
FitModel(Sequences, Targets)
def FitModel(data, target):
trainPercentage = 0.8
splitValue = round(len(data) * trainPercentage)
(x_train, y_train) = data[0:splitValue], target[0:splitValue]
(x_test, y_test) = data[splitValue:len(
data)], target[splitValue:len(target)]
model = Sequential()
model.add(LSTM(128, activation='relu',
input_shape=(1000, 1), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
opt = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))
def padWithZero(targetLength, sequence):
i = 0
while not(len(sequence) >= targetLength):
if (i % 2 == 0):
sequence.append(0.0)
else:
sequence.insert(0, 0.0)
i += 1
return sequence
def createListOfSequences(dataPath):
DataAsString = []
for line in open(dataPath):
x = line.rstrip()
DataAsString.append((x.split(',')))
ListOfSequences = []
for seq in DataAsString:
listOfFloats = []
for val in seq:
if '.' in val:
listOfFloats.append(float(val))
ListOfSequences.append(listOfFloats)
return(ListOfSequences)
main()
如有任何帮助,我们将不胜感激。谢谢
正如错误信息所说,LSTM 需要 3 个维度的输入。你可以像这样重塑:
x_train = x_train.reshape(x_train.shape[0], 1, x_train.shape[1])
基本上,将形状 (a, b)
变成 (a, 1, b)
。