Ошибка с формой ввода в керасе Последовательная модель - PullRequest
0 голосов
/ 11 января 2019

Всех приветствую. Пытаюсь разобраться с керасом. У меня есть несколько изображений, сохраненных в формате .npy, а также их метки.

При обучении модели я получаю ошибку:

ValueError: Ошибка при проверке ввода: ожидалось, что dens_input имеет форму (135, 240), но получил массив с формой (240, 3)

Что очень странно, потому что форма представленного изображения:

(135, 240, 3)

Мой класс NeuralNetwork:

class NeuralNetwork():
    def __init__(self):

    self.model = keras.models.Sequential()
    self.model.add(keras.layers.Dense(1024, input_shape=(135, 240), activation="relu"))
    self.model.add(keras.layers.Dense(512, activation="relu"))
    self.model.add(keras.layers.Dense(9, activation="softmax"))

    opt = keras.optimizers.Adam()
    self.model.compile(loss="categorical_crossentropy", optimizer=opt,
                  metrics=["accuracy"])

    def FitModel(self, trainX, trainY):
        self.model.fit(trainX, trainY, epochs=30)


    def Predict(self, image):
        predictions = self.model.predict(image)

        choice = np.argmax(predictions[0])
        return choice

И главное:

Data_Count = 7990

WIDTH = 240
HEIGHT = 135

nn = NeuralNetwork()

for i in range(1, DataCount+1):

    file_name = 'D:/TrainingData/training_data-{}.npy'.format(i)
    train_data = np.load(file_name)

    image = np.array([i[0] for i in train_data])[0]
    label = np.array([i[1] for i in train_data])[0]

    image = image / 255

    nn.FitModel(image, label)

Почему она получает только (240, 3) вместо (135, 240)?

Заранее спасибо за ответ!

1 Ответ

0 голосов
/ 11 января 2019

Ваш input_shape для плотного слоя неверен. Ваши изображения имеют форму (135, 240, 3), но вы подаете (135,240), что означает, что вы пропускаете каналы изображения. Кроме того, вы забыли выровнять изображения перед подачей их в плотный слой. Вот пример с некоторыми фиктивными данными:

import numpy as np
from tensorflow.python import keras

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=(135, 240, 3)))
model.add(keras.layers.Dense(1024, activation="relu"))
model.add(keras.layers.Dense(512, activation="relu"))
model.add(keras.layers.Dense(9, activation="softmax"))

model.compile(loss="categorical_crossentropy", optimizer='adam', metrics=["accuracy"])

# dummy data
images = np.zeros(shape=(7990, 135, 240, 3))
labels = np.zeros(shape=(7990, 9))

# train model
model.fit(x=images, y=labels, batch_size=128)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...