| 1829 | } |
| 1830 | |
| 1831 | void sigmoid_gradient ( |
| 1832 | tensor& grad, |
| 1833 | const tensor& dest, |
| 1834 | const tensor& gradient_input |
| 1835 | ) |
| 1836 | { |
| 1837 | const auto g = grad.host(); |
| 1838 | const auto d = dest.host(); |
| 1839 | const auto in = gradient_input.host(); |
| 1840 | if (is_same_object(gradient_input, grad)) |
| 1841 | { |
| 1842 | for (size_t i = 0; i < dest.size(); ++i) |
| 1843 | g[i] = in[i]*d[i]*(1-d[i]); |
| 1844 | } |
| 1845 | else |
| 1846 | { |
| 1847 | for (size_t i = 0; i < dest.size(); ++i) |
| 1848 | g[i] += in[i]*d[i]*(1-d[i]); |
| 1849 | } |
| 1850 | } |
| 1851 | |
| 1852 | // ------------------------------------------------------------------------------------ |
| 1853 | |