I'm studying on histopathologic image segmentation project. I built a model for that, but accuracy is always staying same across the epochs. It is always 0.5000. I need to improve it. I changed learning rate, batch size, epochs(I tried to increase/decrease it), optimizer (I tried SGD, RMSPROP, ADAM) etc before. But there is still no change. What should I do for that? Thanks in advance for your help.
Here are my codes for the model:
depth=3
class Net:
@staticmethod
def build(img_width, img_height, depth, classes):
model = Sequential()
chanDim = -1
inputShape =(input_shape)
model.add(SeparableConv2D(32, (3, 3), padding="same",input_shape = inputShape))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
# (CONV => RELU => POOL) * 2
model.add(SeparableConv2D(64, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(SeparableConv2D(64, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(SeparableConv2D(128, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(SeparableConv2D(128, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(SeparableConv2D(128, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation("relu"))
model.add(BatchNormalization())
model.add(Dropout(0.2))
model.add(Dense(64))
model.add(Activation("softmax"))
model.add(Dropout(1))
model.summary()
return model
model_history = model.fit_generator(img_train_gen,
steps_per_epoch = train_steps,
epochs=10,
verbose=1,
validation_data=img_val_gen,
validation_steps= val_steps)
model.save('nucleiproject.h5')
The results of accuracy:
64/64 [==============================] - 69s 1s/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 2/10
64/64 [==============================] - 66s 1s/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 3/10
64/64 [==============================] - 65s 1s/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 4/10
64/64 [==============================] - 63s 982ms/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 5/10
64/64 [==============================] - 64s 997ms/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 6/10
64/64 [==============================] - 63s 979ms/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 7/10
64/64 [==============================] - 67s 1s/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 8/10
64/64 [==============================] - 67s 1s/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 9/10
64/64 [==============================] - 69s 1s/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000
Epoch 10/10
64/64 [==============================] - 75s 1s/step - loss: nan - accuracy: 0.5000 - val_loss: nan - val_accuracy: 0.5000