aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/periodic_resample/ops/array_ops.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/contrib/periodic_resample/ops/array_ops.cc')
-rw-r--r--tensorflow/contrib/periodic_resample/ops/array_ops.cc42
1 files changed, 28 insertions, 14 deletions
diff --git a/tensorflow/contrib/periodic_resample/ops/array_ops.cc b/tensorflow/contrib/periodic_resample/ops/array_ops.cc
index c90fc06c7f..82bd796956 100644
--- a/tensorflow/contrib/periodic_resample/ops/array_ops.cc
+++ b/tensorflow/contrib/periodic_resample/ops/array_ops.cc
@@ -34,26 +34,40 @@ This function implements a slightly more generic version of the subpixel
convolutions found in this [paper](https://arxiv.org/abs/1609.05158).
The formula for computing the elements in the `output` tensor is as follows:
+
`T` = `values` tensor of rank `R`
+
`S` = desired `shape` of output tensor (vector of length `R`)
+
`P` = `output` tensor of rank `R`
- \((T_1,\ldots,T_R)\) = shape(`T`)
- \([S_1,\ldots,S_q,\ldots,S_R]\) = elements of vector `S`
- A single element in `S` is left unspecified (denoted \(S_q=-1\)).
- Let \(f_i\) denote the (possibly non-integer) factor that relates the original
- dimension to the desired dimensions, \(S_i=f_i T_i\), for \(i\neq q\) where
- \(f_i>0\).
+ \\((T_1,\\ldots,T_R)\\) = shape(`T`)
+
+ \\([S_1,\\ldots,S_q,\\ldots,S_R]\\) = elements of vector `S`
+
+ A single element in `S` is left unspecified (denoted \\(S_q=-1\\)).
+
+ Let \\(f_i\\) denote the (possibly non-integer) factor that relates the original
+ dimension to the desired dimensions, \\(S_i=f_i T_i\\), for \\(i\\neq q\\) where
+ \\(f_i>0\\).
+
Define the following:
- \(g_i=\lceil f_i\rceil\)
- \(t=\prod_i T_i\)
- \(s=\prod_{i\neq q} S_i\)
- \(S_q\) can then be defined as by \(S_q=\lfloor t/s\rfloor\).
+
+ \\(g_i=\\lceil f_i\\rceil\\)
+
+ \\(t=\\prod_i T_i\\)
+
+ \\(s=\\prod_{i\\neq q} S_i\\)
+
+ \\(S_q\\) can then be defined by \\(S_q=\\lfloor t/s\\rfloor\\).
The elements of the resulting tensor are defined as
- \(P_{s_1,\ldots,s_R}=T_{h_1,\ldots,h_q,\ldots,h_R}\).
- The \(h_i\) (\(i\neq q\)) are defined by \(h_i=\lfloor s_i/g_i\rfloor\).
- \(h_q=S_q\sum_{j\neq q}^{q-1}G_j \mathrm{mod}(s_j,g_j) + s_q\), where
- \(G_j=\prod_{i}^{j-1}g_i\) (\(G_0=1\)).
+
+ \\(P_{s_1,\\ldots,s_R}=T_{h_1,\\ldots,h_q,\\ldots,h_R}\\).
+
+ The \\(h_i\\) (\\(i\\neq q\\)) are defined by \\(h_i=\\lfloor s_i/g_i\\rfloor\\).
+
+ \\(h_q=S_q\\sum_{j\\neq q}^{q-1}G_j \\mathrm{mod}(s_j,g_j) + s_q\\), where
+ \\(G_j=\\prod_{i}^{j-1}g_i\\) (\\(G_0=1\\)).
One drawback of this method is that whenever the output dimensions are slightly
less than integer multiples of the input dimensions, many of the tensor elements