Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在培训期间实施随机裁剪?_Python_Tensorflow_Deep Learning_Conv Neural Network_Data Augmentation - Fatal编程技术网

Python 如何在培训期间实施随机裁剪?

Python 如何在培训期间实施随机裁剪?,python,tensorflow,deep-learning,conv-neural-network,data-augmentation,Python,Tensorflow,Deep Learning,Conv Neural Network,Data Augmentation,我正在开发一个U型网络模型,它可以在多发性硬化症患者的两个时间点之间分割受损的大脑组织。该模型以基线图像和后续图像为x,分割模板为y。图像是3D的(192218192),模型输入大小是(128128128),并且正在通过骰子丢失进行训练。该模型基于以下文件: 我目前正在做的是在训练前对每个图像进行中心裁剪,训练骰子分数似乎学习得很好,但在验证数据中却不是这样 我已经读到随机裁剪10次左右有助于减少过度拟合,但我不知道如何实现它。我编写了这个函数来进行随机裁剪: def random_crop(i

我正在开发一个U型网络模型,它可以在多发性硬化症患者的两个时间点之间分割受损的大脑组织。该模型以基线图像和后续图像为x,分割模板为y。图像是3D的(192218192),模型输入大小是(128128128),并且正在通过骰子丢失进行训练。该模型基于以下文件:

我目前正在做的是在训练前对每个图像进行中心裁剪,训练骰子分数似乎学习得很好,但在验证数据中却不是这样

我已经读到随机裁剪10次左右有助于减少过度拟合,但我不知道如何实现它。我编写了这个函数来进行随机裁剪:

def random_crop(img_bl, img_fu, mask, width=128, height=128, depth=128):
    x = random.randint(0, img_bl.shape[1] - width)
    y = random.randint(0, img_bl.shape[0] - height)
    z = random.randint(0, img_bl.shape[2] - depth)
    img_bl = img_bl[y:y + height, x:x + width, z:z + depth]
    img_fu = img_fu[y:y + height, x:x + width, z:z + depth]
    mask = mask[y:y + height, x:x + width, z:z + depth]

    return img_bl, img_fu, mask

在对每个图像进行培训之前,我是否只应用此功能10次?或者有没有办法将随机裁剪包含在模型中并与这10个子卷的预测重叠?

您可以通过
tf.image.random\u crop
功能在Tensorflow中裁剪图像

cropped=tf.image.random_crop(image, (PATCH_SIZE,PATCH_SIZE,3))
若要裁剪案例中的三维模型,还可以设置通道参数

cropped=tf.image.random_crop(model, (PATCH_SIZE_1,PATCH_SIZE_2,PATCH_SIZE_3))
要将此裁剪完美地应用于输入管道,可以使用
tf.keras.layers.Lambda
,映射此函数

def crop_layer():
  def _crop_layer(x):
    return cropped=tf.image.random_crop(x, (PATCH_SIZE_1,PATCH_SIZE_2,PATCH_SIZE_3))
  return lambda x:_crop_layer(x)

layer=tf.keras.layers.Lambda(crop_layer)(input)
...