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) Я понимаю, в чем проблема, но не знаю, как ее исправить. Гуглила, искала похожие проблемы на стеке, но увы. Всем спасибо за отклики.


Ответы (0 шт):