| 274 | self.miu = miu |
| 275 | |
| 276 | def first_derivative(self, input): |
| 277 | u = input |
| 278 | m = u.shape[2] |
| 279 | n = u.shape[3] |
| 280 | k = u.shape[4] |
| 281 | |
| 282 | ci_0 = (u[:, :, 1, :, :] - u[:, :, 0, :, :]).unsqueeze(2) |
| 283 | ci_1 = u[:, :, 2:, :, :] - u[:, :, 0:m - 2, :, :] |
| 284 | ci_2 = (u[:, :, -1, :, :] - u[:, :, m - 2, :, :]).unsqueeze(2) |
| 285 | ci = torch.cat([ci_0, ci_1, ci_2], 2) / 2 |
| 286 | |
| 287 | cj_0 = (u[:, :, :, 1, :] - u[:, :, :, 0, :]).unsqueeze(3) |
| 288 | cj_1 = u[:, :, :, 2:, :] - u[:, :, :, 0:n - 2, :] |
| 289 | cj_2 = (u[:, :, :, -1, :] - u[:, :, :, n - 2, :]).unsqueeze(3) |
| 290 | cj = torch.cat([cj_0, cj_1, cj_2], 3) / 2 |
| 291 | |
| 292 | ck_0 = (u[:, :, :, :, 1] - u[:, :, :, :, 0]).unsqueeze(4) |
| 293 | ck_1 = u[:, :, :, :, 2:] - u[:, :, :, :, 0:k - 2] |
| 294 | ck_2 = (u[:, :, :, :, -1] - u[:, :, :, :, k - 2]).unsqueeze(4) |
| 295 | ck = torch.cat([ck_0, ck_1, ck_2], 4) / 2 |
| 296 | |
| 297 | return ci, cj, ck |
| 298 | |
| 299 | def second_derivative(self, input, ci, cj, ck): |
| 300 | u = input |