ValueError: Ошибка при проверке ввода: ожидалось, что lstm_1_input будет иметь 3 измерения, но получит массив с формой (378, 20) - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь приспособить мой 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 не должен давать ошибок.

...