Ошибка значения: ожидаемый ndim = 3, найдено ndim = 2

#python #tensorflow #keras #tensorflow2.0

#python #тензорный поток #keras #tensorflow2.0

Вопрос:

Я тренирую свою модель глубокого обучения, когда я запускаю свой код, я сталкиваюсь с некоторой ошибкой.

вот мой код

 import os
import json
import tensorflow as tf
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

data_path = "data_json.json"

def load_data(data_path):
    print("Data loadingn")
    with open(data_path, "r") as fp:
        data = json.load(fp)

    x = np.array(data["mfcc"])
    y = np.array(data["labels"])

    print("Loaded Data")

    return x, y


def prepare_datasets(test_size,val_size):

    #load the data
    x, y = load_data(data_path)

    x_train, x_test, y_train, y_test = train_test_split(x,y,test_size = test_size)
    x_train, x_val, y_train, y_val = train_test_split(x_train,y_train,test_size = val_size)

    return x_train, x_val, x_test, y_train, y_val, y_test


def build_model(input_shape):


    model = tf.keras.Sequential()

    model.add(tf.keras.layers.LSTM(64, input_shape = input_shape, return_sequences = True))
    model.add(tf.keras.layers.LSTM(64))

    model.add(tf.keras.layers.Dense(64, activation="relu"))
    #model.add(tf.keras.layers.Dropout(0.3))

    model.add(tf.keras.layers.Dense(10,activation = "softmax"))

    return model

if __name__ == "__main__":


    x_train, x_val, x_test, y_train, y_val, y_test = prepare_datasets(0.25, 0.2)

    print(x_train.shape[0])

    input_shape = (x_train.shape[1],x_train.shape[2])
    model = build_model(input_shape)

    # compile model
    optimiser = tf.keras.optimizers.Adam(lr=0.001)
    model.compile(optimizer=optimiser,
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])

    model.summary()
    model = tf.keras.models.load_model("model_RNN_LSTM.h5")
    print(model.predict(x_test[100]))
 

Ошибка, которую я получаю, находится в строке "print(model.predict(x_test[100]))"

.Ошибка значения: ввод 0 слоя sequential_1 несовместим со слоем: ожидаемый ndim=3, найдено ndim=2 . Получена полная форма: (Нет, 13) .

Как мне исправить эту ошибку? Нужно ли мне изменять размеры?

Ответ №1:

Keras predict() работает с пакетами — https://www.tensorflow.org/api_docs/python/tf/keras/Model#predict

 print(model.predict(x_test[100][np.newaxis, ...]))
 

Ответ №2:

Измените форму входного массива как (-1, batch_size,input_shape[0],input_shape [1],input_shape [2]). Как правило, predict() требуется дополнительное измерение. Я точно знаю это в случае изображений, но вы можете попробовать и в вашем случае.