Я пытаюсь приспособить мой 2d массив к LSTM, так как LSTM принимает 3D ввод, я не могу понять, как это сделать.мой файл .csv содержит 21 столбец, 1-й номер - номер экземпляра, последний - строковый тип Метка класса.Остальные - список возможностей.Форма файла CSV (540, 20).
Я попытался расширить измерение до 3d с помощью np.expand_dims, я получаю сообщение об ошибке как ValueError: не могу преобразовать массив размером 10800 в форму (378,1,20).
file = ("training_mfcc.csv")
cols = np.arange(21);
cols = [str(x) for x in cols]
cols[20]='Class'
dataset = pd.read_csv(file,header=None,names = cols)
# ---------------------------
# Preprocessing. i.e convert categorical to numeric
from sklearn.preprocessing import LabelEncoder
dataset['Class'] = LabelEncoder().fit_transform(dataset['Class'])
train,test=train_test_split(dataset,test_size=0.3,random_state=36,stratify=dataset['Class'])
X_train=train.drop('Class',axis=1)
Y_train=train['Class']
X_test=test.drop('Class',axis=1)
Y_test=test['Class']
X=dataset.drop('Class',axis=1)
Y=dataset['Class']
num_classes = len(set(Y))
X = np.array(X)
X = X.astype('float64')
X /= 255
Y = np.array(Y)
Y = Y.astype('float64')
Y_train = to_categorical(Y_train, num_classes)
Y_test = to_categorical(Y_test, num_classes)
Y = to_categorical(Y, num_classes)
print(X.shape)
X = X.reshape(X.shape[0],1, X.shape[1])
Y = Y.reshape(Y.shape[0],1, num_classes)
num_classes = 5
data_dim = 20
timesteps = 1
batch_size = 12
model = Sequential()
# model.add(Embedding(45, 15, input_length = (X.shape[1], 1), dropout = 0.3))
model.add(LSTM(32, return_sequences=True, stateful=True, batch_input_shape=(batch_size, timesteps, data_dim)))
model.add(LSTM(32, return_sequences=True, stateful=True))
model.add(Dense(num_classes, activation='softmax'))
# model.add(Flatten())
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'], early_stop = EarlyStopping(monitor='loss', patience=2))
model.summary()
model.fit(X_train, Y_train, batch_size =batch_size, epochs = 100,
verbose = 1, validation_data=(X_test, Y_test))
Я ожидаю, что код будет динамически корректироваться и изменяться в зависимости от экземпляров файла и model.fit не должен давать ошибок.