CNN - отрицательная величина потерь - PullRequest
0 голосов
/ 22 февраля 2019

Микроскопические изображения имеют формат .tif и имеют следующие характеристики:

  • Цветовая модель: R (ed) G (reen) B (lue)
  • Размер: 2048 x1536 пикселей
  • Масштаб пиксела: 0,42 мкм x 0,42 мкм
  • Объем памяти: 10-20 МБ (прибл.)
  • Тип этикетки: по изображению
  • 4 класс: доброкачественный, инвазивный, в Ситу, нормальный

код CNN:

from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense


classifier = Sequential()


classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))


classifier.add(MaxPooling2D(pool_size = (2, 2)))


classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())


classifier.add(Dense(output_dim = 128, activation = 'relu'))
classifier.add(Dense(output_dim = 1, activation = 'sigmoid'))


classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])


from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

training_set = train_datagen.flow_from_directory('BACH ICIAR 2018/ICIAR2018_BACH_Challenge/Photos',
                                                 target_size = (64, 64),
                                                 batch_size = 1,
                                                 class_mode = 'binary')

test_set = test_datagen.flow_from_directory('BACH ICIAR 2018/ICIAR2018_BACH_Challenge_TestDataset',
                                            target_size = (64, 64),
                                            batch_size = 1,
                                            class_mode = 'binary')

classifier.fit_generator(training_set,
                         samples_per_epoch = 8000,
                         nb_epoch = 1,
                         validation_data = test_set,
                         nb_val_samples = 2000)

выход:

Found 400 images belonging to 4 classes.
Found 100 images belonging to 1 classes.
331/8000 [>.............................] - ETA: 23:37 - loss: -7.9829 - acc: 0.2538

выдает ошибку, если я изменяюэто, как это:

classifier.add(Dense(output_dim = 4, activation = 'softmax'))

вывод:

TypeError: softmax() got an unexpected keyword argument 'axis'

выдает ошибку, если я ее изменю, вот так:

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

вывод:

ValueError: You are passing a target array of shape (1, 1) while using as loss `categorical_crossentropy`. `categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes). If your targets are integer classes, you can convert them to the expected format via:
```
from keras.utils import to_categorical
y_binary = to_categorical(y_int)
```

Alternatively, you can use the loss function `sparse_categorical_crossentropy` instead, which does expect integer targets.

Почему величина потерь отрицательна?Что мне нужно изменить в коде?Что это значит?И какова возможная причина?

Спасибо за любой ответ

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