我试图针对超声神经数据集试验一些现有的语义分割代码。
实施基于u-net architecture。
在训练过程中,我可以捕捉每个时期的验证图。在下图中,左边的是原始图像,中间的是真实的图像,右边的是预测的图像(或概率图)。
如下图所示,我们可以看到epoch0的预测只是全黑,那么在我看来,它开始捕捉原始图像的一些分布,然后它再次全黑。
我只想知道如何根据这些情节来解释训练过程,为什么它会在几个训练时期之后回到第一个时期的结果。
此外,为什么预测结果会在训练过程中重现原始图像的分布。
是否可以从这些训练观察中得出任何见解?
我通常跟随tutorial来生成训练集。 (我在教程中使用了create_train_data
的相同功能。
唯一的区别是我添加了一个背景通道,以使形状为(1,image_row, image_col,2)
img_mask = io.imread(os.path.join(raw_data_path, image_mask_name))
img_mask = img_mask//255
img_mask_background = 1-img_mask
加载从上面生成的npy
文件后,我将训练集的原始图像标准化
imgs_train = np.load(os.path.join(train_data_path,"imgs_train.npy"))
imgs_mask_train = np.load(os.path.join(train_data_path,"imgs_mask_train.npy"))
imgs_train = imgs_train.astype('float32')
mean = np.mean(imgs_train) # mean for data centering
std = np.std(imgs_train) # std for data normalization
imgs_train -= mean
imgs_train /= std
我按照implementation来训练模型。除了这个之外,我没有改变任何东西
self.learning_rate_node = tf.train.exponential_decay(learning_rate=learning_rate,
global_step=global_step,
decay_steps=training_iters,
decay_rate=decay_rate,
staircase=True)
我将其更改为
global_step = global_step*self.batch_size