Weird Keras Прогнозы классификатора изображений CNN - PullRequest
0 голосов
/ 24 января 2019

Я скомпилировал классификатор изображений между кошками и собаками, но при тестировании его на тестовой серии картинок прогнозы вышли отличными от 1 или 0, как и должно быть: (

Я получил дрессировочных собаки изображения кошек из Google, и я могу или не могу переименовать некоторые PNG фото в JPG, разве в этом проблема?

In [78]:
train_path = 'train'
test_path = 'test'
valid_path = 'valid'


In [79]:
train_batches = ImageDataGenerator().flow_from_directory(train_path, target_size=(224,224), classes=['dogs', 'cats'], batch_size=10)

test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224,224), classes=['dogs', 'cats'], batch_size=10)

valid_batches = ImageDataGenerator().flow_from_directory(valid_path, target_size=(224,224), classes=['dogs', 'cats'], batch_size=4)

Found 40 images belonging to 2 classes.
Found 10 images belonging to 2 classes.
Found 16 images belonging to 2 classes.


In [81]:
imgs, labels = next(train_batches)


In [84]:
model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(224,224,3)),
    Flatten(),
    Dense(2, activation='softmax'), ])


In [85]:
model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])


In [86]:
model.fit_generator(train_batches, steps_per_epoch=4, validation_data=valid_batches, validation_steps=4, epochs=5, verbose=2)
Epoch 1/5
 - 3s - loss: 6.8502 - acc: 0.5750 - val_loss: 8.0590 - val_acc: 0.5000
Epoch 2/5
 - 2s - loss: 8.4620 - acc: 0.4750 - val_loss: 8.0590 - val_acc: 0.5000
Epoch 3/5
 - 2s - loss: 8.8650 - acc: 0.4500 - val_loss: 8.0590 - val_acc: 0.5000
Epoch 4/5
 - 2s - loss: 7.6561 - acc: 0.5250 - val_loss: 8.0590 - val_acc: 0.5000
Epoch 5/5
 - 2s - loss: 8.0590 - acc: 0.5000 - val_loss: 8.0590 - val_acc: 0.5000
<keras.callbacks.History at 0x23a3a6bd2b0>


In [87]:
test_imgs, test_labels = next(test_batches)


In [88]:
test_labels = test_labels[:,0]
test_labels
array([1., 1., 0., 0., 1., 0., 1., 1., 0., 0.], dtype=float32)


In [91]:
predictionz = model.predict_generator(test_batches, steps=1, verbose=0)


In [92]: predictionz
array([[6.3490617e-33, 1.0000000e+00],
       [0.0000000e+00, 1.0000000e+00],
       [0.0000000e+00, 1.0000000e+00],
       [0.0000000e+00, 1.0000000e+00],
       [2.1344874e-26, 1.0000000e+00],
       [0.0000000e+00, 1.0000000e+00],
       [1.4632116e-31, 1.0000000e+00],
       [2.2157095e-33, 1.0000000e+00],
       [0.0000000e+00, 1.0000000e+00],
       [0.0000000e+00, 1.0000000e+00]], dtype=float32)

они должны были появиться как один или нули, но они дают почти случайнопредсказания.

1 Ответ

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

Так что я наконец исправил это после получения наборов данных с новыми изображениями из kaggle, спокойной ночи! https://www.kaggle.com/c/dogs-vs-cats/data

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