Input 0 of layer max_pooling2d is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: (None, 24, 60, 41, 24)
Есть модель: '''
def get_network():
num_filters = [24,32,64,128]
pool_size = (2, 2)
kernel_size = (3, 3)
batch_size = 24
input_shape = (60, 41, 2)
num_classes = 10
keras.backend.clear_session()
model = keras.models.Sequential()
model.add(keras.layers.Conv2D(24, kernel_size,
padding="same", input_shape=(60,41,2)))
model.add(keras.layers.Activation("relu"))
model.add(keras.layers.MaxPooling2D(pool_size=pool_size))
model.add(keras.layers.Conv2D(32, kernel_size,
padding="same"))
model.add(keras.layers.Activation("relu"))
model.add(keras.layers.MaxPooling2D(pool_size=pool_size))
model.add(keras.layers.Conv2D(64, kernel_size,
padding="same"))
model.add(keras.layers.Activation("relu"))
model.add(keras.layers.MaxPooling2D(pool_size=pool_size))
model.add(keras.layers.Conv2D(128, kernel_size,
padding="same"))
model.add(keras.layers.Activation("relu"))
model.add(keras.layers.GlobalMaxPooling2D())
model.add(keras.layers.Dense(128, activation="relu"))
model.add(keras.layers.Dense(num_classes, activation="softmax"))
model.compile(optimizer='adam',
loss=keras.losses.SparseCategoricalCrossentropy(),
metrics=["accuracy"])
return model
'''
Есть код:
'''
from sklearn.model_selection import KFold
from sklearn.metrics import accuracy_score
accuracies = []
folds = np.array(['fold1','fold2','fold3','fold4',
'fold5','fold6','fold7','fold8',
'fold9','fold10'])
load_dir = "drive/MyDrive/preproc/"
kf = KFold(n_splits=10)
for train_index, test_index in kf.split(folds):
x_train, y_train = [], []
for ind in train_index:
# read features or segments of an audio file
train_data = np.load("{0}/{1}.npz".format(load_dir,folds[ind]),
allow_pickle=True)
# for training stack all the segments so that they are treated as an example/instance
features = np.array(train_data["features"])
labels = np.array(train_data["labels"])
x_train.append(features)
y_train.append(labels)
# stack x,y pairs of all training folds
x_train = np.concatenate(x_train, axis = 0).astype(np.float32)
y_train = np.concatenate(y_train, axis = 0).astype(np.float32)
# for testing we will make predictions on each segment and average them to
# produce signle label for an entire sound clip.
test_data = np.load("{0}/{1}.npz".format(load_dir,
folds[test_index][0]), allow_pickle=True)
x_test = test_data["features"]
y_test = test_data["labels"]
model = get_network()
model.fit(x_train, y_train, epochs = 10, batch_size = 24, verbose = 0)
# evaluate on test set/fold
y_true, y_pred = [], []
for x, y in zip(x_test, y_test):
# average predictions over segments of a sound clip
avg_p = np.argmax(np.mean(model.predict(x), axis = 0))
y_pred.append(avg_p)
# pick single label via np.unique for a sound clip
y_true.append(np.unique(y)[0])
accuracies.append(accuracy_score(y_true, y_pred))
print("Average 10 Folds Accuracy: {0}".format(np.mean(accuracies)))'''
Если я запускаю такой код, я получаю сообщение об ошибке: Вход 0 последовательного слоя несовместим со слоем:: expected min_ndim = 4, found ndim = 2. Получена полная форма: (Нет, 193) Если я добавлю еще один batch_size к input_shape и перезапущу его, я получаю сообщение об ошибке: Input 0 слоя max_pooling2d несовместим со слоем: ожидалось ndim = 4, найдено ndim = 5. Получена полная форма: (Нет, 24, 60, 41, 24) Я понимаю, в чем проблема, но не знаю, как ее исправить. Гуглила, искала похожие проблемы на стеке, но увы. Всем спасибо за отклики.