Keras ожидает 2d массив и форму (1,) одновременно - PullRequest
0 голосов
/ 01 октября 2018

Я загружаю модель керас на

model = keras.models.load_model('myModel.h5')
model.fit(x,y, batch_size=1, epochs=2)

Здесь, в последней строке, она показывает ошибку, так что она хочет, чтобы y был 2D-входом.Пример моего файла y [0,0, -1], который можно изменить на [[0,0, -1]] или [[0], [0], [- 1]] в 2D. В первом случаеОшибка: получил массив с формой (3,), где ожидаемая форма (1,) и во втором случае Ошибка: есть 3 выборки, где ожидается 1

. Перед этой обучающей частью я запускаю model.predict (), во время которой ондает вывод в формате [[0.00251, -0.00526, 0.005476]]

Чего мне не хватает?

Определение модели

inputs = Input(shape=(32,32,1))
denseModel = DenseNet121(include_top=False, weights=None, input_shape=(32,32,1), pooling='avg')(inputs)
denseModel = Dense(32, activation='relu')(denseModel)
denseModel = BatchNormalization()(denseModel)
denseModelPrediction = Dense(3, activation='tanh', name='predictions')(denseModel)

myModel = Model(inputs=inputs, outputs=denseModelPrediction)
myModel.compile(loss='sparse_categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
myModel.save('myModel.h5')

Здесь просто инициализируется

1 Ответ

0 голосов
/ 01 октября 2018

Ваша функция потерь (sparse_categorical_crossentropy) ожидает, что ваши значения y будут иметь одно горячее кодирование.Поскольку у вас есть три выходных узла, потери ожидают значение y с формой (3,), следовательно, ваша первая ошибка.

Если вы пытаетесь регрессировать три независимых вероятности, я бы предложил переключить вашу потерю начто-то, что сравнивает числа (например, loss='mse' означает квадратичную ошибку).Это должно исправить вашу проблему формы ввода.Возможно, вы также захотите установить для активации выходов sigmoid, чтобы она была между нулем и единицей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...