| @@ 63-80 (lines=18) @@ | ||
| 60 | glimpse_3 = theano.tensor.signal.downsample.max_pool_2d(glimpse_3, (4,4)) |
|
| 61 | return T.concatenate([glimpse_1, glimpse_2, glimpse_3]) |
|
| 62 | ||
| 63 | def _refined_glimpse_sensor(self, x_t, l_p): |
|
| 64 | """ |
|
| 65 | Parameters: |
|
| 66 | x_t - 28x28 image |
|
| 67 | l_p - 2x1 focus vector |
|
| 68 | Returns: |
|
| 69 | 7*14 matrix |
|
| 70 | """ |
|
| 71 | # Turn l_p to the left-top point of rectangle |
|
| 72 | l_p = l_p * 14 + 14 - 4 |
|
| 73 | l_p = T.cast(T.round(l_p), "int32") |
|
| 74 | ||
| 75 | l_p = l_p * (l_p >= 0) |
|
| 76 | l_p = l_p * (l_p < 21) + (l_p >= 21) * 20 |
|
| 77 | glimpse_1 = x_t[l_p[0]: l_p[0] + 7][:, l_p[1]: l_p[1] + 7] |
|
| 78 | # glimpse_2 = theano.tensor.signal.downsample.max_pool_2d(x_t, (4,4)) |
|
| 79 | # return T.concatenate([glimpse_1, glimpse_2]) |
|
| 80 | return glimpse_1 |
|
| 81 | ||
| 82 | def _multi_gaussian_pdf(self, vec, mean): |
|
| 83 | norm2d_var = ((1.0 / T.sqrt((2*np.pi)**2 * self.cov_det_var)) * |
|
| @@ 55-70 (lines=16) @@ | ||
| 52 | first_l = sampled_l_t |
|
| 53 | return first_l, wf_grad |
|
| 54 | ||
| 55 | def _refined_glimpse_sensor(self, x_t, l_p): |
|
| 56 | """ |
|
| 57 | Parameters: |
|
| 58 | x_t - 28x28 image |
|
| 59 | l_p - 2x1 focus vector |
|
| 60 | Returns: |
|
| 61 | 7*14 matrix |
|
| 62 | """ |
|
| 63 | # Turn l_p to the left-top point of rectangle |
|
| 64 | l_p = l_p * 6.67 + 14 - 4 |
|
| 65 | l_p = T.cast(T.round(l_p), "int32") |
|
| 66 | ||
| 67 | l_p = l_p * (l_p >= 0) |
|
| 68 | l_p = l_p * (l_p < 21) + (l_p >= 21) * 20 |
|
| 69 | glimpse_1 = x_t[l_p[0]: l_p[0] + 7][:, l_p[1]: l_p[1] + 7] |
|
| 70 | return glimpse_1 |
|
| 71 | ||
| 72 | def _multi_gaussian_pdf(self, vec, mean): |
|
| 73 | norm2d_var = ((1.0 / T.sqrt((2*np.pi)**2 * self.cov_det_var)) * |
|