TensorFlow函數(shù)教程:tf.nn.with_space_to_batch

2019-02-14 14:54 更新

tf.nn.with_space_to_batch函數(shù)

tf.nn.with_space_to_batch(
    input,
    dilation_rate,
    padding,
    op,
    filter_shape=None,
    spatial_dims=None,
    data_format=None
)

定義在:tensorflow/python/ops/nn_ops.py。

對(duì)輸入的space-to-batch表示執(zhí)行操作。

這具有將滑動(dòng)窗口操作轉(zhuǎn)換為相應(yīng)的“atrous”操作的效果,其中輸入在指定的dilation_rate處被采樣。

在dilation_rate統(tǒng)一為1的特殊情況下,這只會(huì)返回:

op(input, num_spatial_dims, padding)

否則,它返回:

batch_to_space_nd( op(space_to_batch_nd(input, adjusted_dilation_rate, adjusted_paddings), num_spatial_dims, "VALID") adjusted_dilation_rate, adjusted_crops),

其中:

adjusted_dilation_rate是一個(gè)int64張量,具有shape [max(spatialdims)],adjusted{paddings,crops}是int64張量,具有shape [max(spatial_dims), 2]

定義如下:

我們首先根據(jù)padding的值和input的空間維度定義兩個(gè)int64張量paddings和crops,shape為[num_spatial_dims, 2]。

如果padding = "VALID",那么:

paddings, crops = required_space_to_batch_paddings( input_shape[spatial_dims], dilation_rate)

如果padding = "SAME",那么:

dilated_filter_shape = filter_shape + (filter_shape - 1) * (dilation_rate - 1)

paddings, crops = required_space_to_batch_paddings( input_shape[spatial_dims], dilation_rate, [(dilated_filter_shape - 1) // 2, dilated_filter_shape - 1 - (dilated_filter_shape - 1) // 2])

因?yàn)閟pace_to_batch_nd與batch_to_space_nd假設(shè)空間維度從第二維開始是連續(xù)的,但指定的spatial_dims可能不是,必須調(diào)整dilation_rate,paddings和crops以便與這些操作一起使用。對(duì)于給定的維度,如果塊大小為1,并且起始和結(jié)束padding和crop均為0,則space_to_batch_nd有效地單獨(dú)留下該維度,這就是不屬于spatial_dims的維度所需要的。此外,space_to_batch_nd和batch_to_space_nd針對(duì)任何數(shù)量的前導(dǎo)和尾隨尺寸有效地處理這種情況。

對(duì)于0 <= i < len(spatial_dims),我們分配:

adjusted_dilation_rate[spatial_dims[i] - 1] = dilation_rate[i] adjusted_paddings[spatial_dims[i] - 1, :] = paddings[i, :] adjusted_crops[spatial_dims[i] - 1, :] = crops[i, :]

adjust_dilation_rate的所有未分配值默認(rèn)為1,而adjust_paddings和adjusted_crops的所有未分配值默認(rèn)為0。

注意,在dilation_rate不均勻?yàn)?的情況下,指定“VALID”填充等同于指定padding = "SAME",其filter_shape為[1] * N。

高級(jí)用法。請(qǐng)注意以下優(yōu)化:具有相同(非均勻1)dilation_rate參數(shù)和“VALID”填充的with_space_to_batch操作的序列。

net = with_space_to_batch(net, dilation_rate, "VALID", op_1) ... net = with_space_to_batch(net, dilation_rate, "VALID", op_k)

可以組合成單個(gè)with_space_to_batch操作,如下所示:

def combined_op(converted_input, num_spatial_dims, _): result = op_1(converted_input, num_spatial_dims, "VALID") ... result = op_k(result, num_spatial_dims, "VALID")

net = with_space_to_batch(net, dilation_rate, "VALID", combined_op)

這消除了對(duì)space_to_batch_nd和batch_to_space_nd的k-1調(diào)用的開銷。

類似地,具有相同(非均勻1)dilation_rate參數(shù),“SAME”填充和奇數(shù)濾波器維度的with_space_to_batch操作系列。

net = with_space_to_batch(net, dilation_rate, "SAME", op_1, filter_shape_1) ... net = with_space_to_batch(net, dilation_rate, "SAME", op_k, filter_shape_k)

可以組合成單個(gè)with_space_to_batch操作,如下所示:

def combined_op(converted_input, num_spatial_dims, _): result = op_1(converted_input, num_spatial_dims, "SAME") ... result = op_k(result, num_spatial_dims, "SAME")

net = with_space_to_batch(net, dilation_rate, "VALID", combined_op)

參數(shù):

  • input:秩的張量> max(spatial_dims)。
  • dilation_rate:int32 已知形狀的張量[num_spatial_dims]。
  • padding:str常量等于“VALID”或“SAME”
  • op:映射(輸入,num_spatial_dims,填充) - >輸出的函數(shù)
  • filter_shape:如果padding =“SAME”,則將卷積內(nèi)核/池窗口的形狀指定為整數(shù)Tensor of shape [> = num_spatial_dims]。如果padding =“VALID”,則忽略filter_shape,無需指定。
  • spatial_dims:單調(diào)遞增的num_spatial_dims 整數(shù)序列(> = 1),指定空間維度input 和輸出。默認(rèn)為:range(1, num_spatial_dims+1)。
  • data_format:字符串或無。指定input和輸出的通道尺寸是最后一個(gè)尺寸(默認(rèn),或者data_format 不是以“NC”開頭),還是第二個(gè)尺寸(如果data_format 以“NC”開頭)。對(duì)于N = 1,有效值為“NWC”(默認(rèn))和“NCW”。對(duì)于N = 2,有效值是“NHWC”(默認(rèn))和“NCHW”。對(duì)于N = 3,有效值為“NDHWC”(默認(rèn))和“NCDHW”。

返回:

如上所述的輸出張量,尺寸將根據(jù)提供的操作而變化。

可能引發(fā)的異常:

  • ValueError:if padding無效或參數(shù)不兼容。
  • ValueError:如果spatial_dims無效。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)