如果我Softmax Activation像这样设置最后一层,我正在用unet进行图像语义分割工作:
...
conv9 = Conv2D(n_classes, (3,3), padding = 'same')(conv9)
conv10 = (Activation('softmax'))(conv9)
model = Model(inputs, conv10)
return model
...
Run Code Online (Sandbox Code Playgroud)
然后使用即使只有一个训练图像loss = tf.keras.losses.CategoricalCrossentropy(from_logits=False)
,训练也不会收敛。
但是,如果我没有Softmax Activation像这样设置最后一层:
...
conv9 = Conv2D(n_classes, (3,3), padding = 'same')(conv9)
model = Model(inputs, conv9)
return model
...
Run Code Online (Sandbox Code Playgroud)
然后使用loss = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
训练将收敛为一个训练图像。
我的groundtruth数据集是这样生成的:
X = []
Y = []
im = cv2.imread(impath)
X.append(im)
seg_labels = np.zeros((height, width, n_classes))
for spath in segpaths:
mask = cv2.imread(spath, 0)
seg_labels[:, …Run Code Online (Sandbox Code Playgroud)