Tensorflow 克拉斯';模型评估期望的训练集维度而不是测试集维度

Tensorflow 克拉斯';模型评估期望的训练集维度而不是测试集维度,tensorflow,keras,lstm,Tensorflow,Keras,Lstm,我目前在Keras中实现了一个简单的LSTM模型,分别有一个训练集x_维度序列(118227,98)和一个测试集x_维度测试(13217,98)时间步/特征。目前模型正在顺利训练,但当我尝试使用测试集进行评估时,我收到以下错误: File "keras_LSTM.py", line 170, in <module> loss, f1, precision = model.evaluate(x_test, y_test, batch_size=batc

我目前在Keras中实现了一个简单的LSTM模型,分别有一个训练集x_维度序列(118227,98)和一个测试集x_维度测试(13217,98)时间步/特征。目前模型正在顺利训练,但当我尝试使用测试集进行评估时,我收到以下错误:

    File "keras_LSTM.py", line 170, in <module>
        loss, f1, precision = model.evaluate(x_test, y_test, 
    batch_size=batch_size)
      File 
    "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site- 
   packages/keras/engine/training.py", line 1102, in evaluate
        batch_size=batch_size)
      File 
    "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/engine/training.py", line 751, in _standardize_user_data
        exception_prefix='input')
      File 
    "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site- 
   packages/keras/engine/training_utils.py", line 138, in 
    standardize_input_data
        str(data_shape))
    ValueError: Error when checking input: expected lstm_1_input to have 
    shape (18227, 98) but got array with shape (3217, 98)
文件“keraslstm.py”,第170行,在
损失,f1,精度=模型评估(x_检验,y_检验,
批次大小=批次大小)
文件
“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
文件包/keras/engine/training.py”,第1102行,评估
批次大小=批次大小)
文件
“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/keras/engine/training.py”,第751行,在用户数据中
异常(前缀为“输入”)
文件
“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
包装/keras/engine/training_utils.py”,第138行,in
标准化输入数据
str(数据形状))
ValueError:检查输入时出错:预期lstm_1_输入具有
形状(18227,98),但获得了具有形状的数组(3217,98)

任何帮助都将不胜感激-如果需要,将提供代码。还应注意,我的输入形状是三维的-但是错误报告忽略了批次大小维度,并输出一个元组(序列长度、特征编号)。

Keras LSTM层希望输入为3 dims as(批次大小、序列长度、输入dims),但您分配错误。试试这个

首先,将数据重塑为: (118227,98)和尺寸试验集x_试验(13217,98)

现在,使用choose
seq_length
,我选择了10

seq_length = 10
X_train1 = []
X_test1 = []
for i in range(0, X_train.shape[0] - seq_length, 1):
    X_train1.append(X_train[i:i+seq_length])      
    X_test1.append(X_test[i:i+seq_length])
    # labels.append(labels[i+seq_length-1])
import numpy as np
X_train1 = np.reshape(X_train1, (-1, seq_length, 98))
X_test1 = np.reshape(X_test1, (-1, seq_length, 98))
现在,你可以走了

input_dims = 98 # an integer
seq_length = 10 # an integer
model = Sequential()
 model.add(LSTM(128, activation='relu', input_shape=(seq_length, input_dims), return_sequences=True))

对于模型,您使用的是单一序列,这是一种无效的方法。

Keras LSTM层希望输入为3 dims as(批次大小、序列长度、输入dims),但您分配错误。试试这个

首先,将数据重塑为: (118227,98)和尺寸试验集x_试验(13217,98)

现在,使用choose
seq_length
,我选择了10

seq_length = 10
X_train1 = []
X_test1 = []
for i in range(0, X_train.shape[0] - seq_length, 1):
    X_train1.append(X_train[i:i+seq_length])      
    X_test1.append(X_test[i:i+seq_length])
    # labels.append(labels[i+seq_length-1])
import numpy as np
X_train1 = np.reshape(X_train1, (-1, seq_length, 98))
X_test1 = np.reshape(X_test1, (-1, seq_length, 98))
现在,你可以走了

input_dims = 98 # an integer
seq_length = 10 # an integer
model = Sequential()
 model.add(LSTM(128, activation='relu', input_shape=(seq_length, input_dims), return_sequences=True))

对于您的模型,您使用的是单一序列,这是一种无效的方法。

Ankish Bansal在小窗口中拆分长序列的想法可能是一种很好的方法。但出于某种原因,您可能希望保持整个序列的连接

在这种情况下,您应该设置您的
input\u shape=(None,98)
,这样,您的模型可以接受任何序列长度。(前提是您不使用任何
展平
层或其他需要固定尺寸的层。)


但是,如果您的数据中有“多个序列”,您可能应该检查所有内容,因为序列的数量通常应该是批量大小

Ankish Bansal在小窗口中拆分长序列的想法可能是一个很好的方法。但出于某种原因,您可能希望保持整个序列的连接

在这种情况下,您应该设置您的
input\u shape=(None,98)
,这样,您的模型可以接受任何序列长度。(前提是您不使用任何
展平
层或其他需要固定尺寸的层。)

但是,如果您的数据中有“多个序列”,您可能应该检查所有内容,因为序列的数量通常应该是批量大小