#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()
требуется дополнительное измерение. Я точно знаю это в случае изображений, но вы можете попробовать и в вашем случае.