Микроскопические изображения имеют формат .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.
Почему величина потерь отрицательна?Что мне нужно изменить в коде?Что это значит?И какова возможная причина?
Спасибо за любой ответ