28 #include "tiny_dnn/util/util.h"
32 namespace activation {
37 function(
const function &) =
default;
38 #ifndef CNN_DEFAULT_MOVE_CONSTRUCTOR_UNAVAILABLE
39 function(
function &&) =
default;
41 function &operator =(
const function &) =
default;
42 #ifndef CNN_DEFAULT_ASSIGNMENT_OPERATOR_UNAVAILABLE
43 function &operator =(
function &&) =
default;
47 virtual float_t f(
const vec_t& v,
size_t index)
const = 0;
48 void itef(vec_t& out,
const vec_t& in,
size_t cnt)
const {
49 for (
size_t i = 0; i < cnt; i++) {
55 virtual float_t df(float_t y)
const = 0;
58 virtual vec_t df(
const vec_t& y,
size_t i)
const { vec_t v(y.size(), 0); v[i] = df(y[i]);
return v; }
61 virtual bool one_hot()
const {
return true; }
64 virtual std::pair<float_t, float_t> scale()
const = 0;
70 float_t f(
const vec_t& v,
size_t i)
const override {
return v[i]; }
71 float_t df(float_t )
const override {
return float_t(1); }
72 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(0.1), float_t(0.9)); }
78 float_t f(
const vec_t& v,
size_t i)
const override {
return float_t(1) / (float_t(1) + std::exp(-v[i])); }
79 float_t df(float_t y)
const override {
return y * (float_t(1) - y); }
80 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(0.1), float_t(0.9)); }
86 float_t f(
const vec_t& v,
size_t i)
const override {
return std::max(float_t(0), v[i]); }
87 float_t df(float_t y)
const override {
return y > float_t(0) ? float_t(1) : float_t(0); }
88 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(0.1), float_t(0.9)); }
96 float_t f(
const vec_t& v,
size_t i)
const override {
return (v[i] > float_t(0)) ? v[i] : float_t(0.01) * v[i]; }
97 float_t df(float_t y)
const override {
return y > float_t(0) ? float_t(1) : float_t(0.01); }
98 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(0.1), float_t(0.9)); }
104 float_t f(
const vec_t& v,
size_t i)
const override {
return (v[i]<float_t(0) ? (exp(v[i])- float_t(1)) : v[i]); }
105 float_t df(float_t y)
const override {
return (y > float_t(0) ? float_t(1) : (float_t(1)+y)); }
106 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(0.1), float_t(0.9)); }
111 float_t f(
const vec_t& v,
size_t i)
const override {
112 float_t alpha = *std::max_element(v.begin(), v.end());
113 float_t numer = std::exp(v[i] - alpha);
114 float_t denom = float_t(0);
116 denom += std::exp(x - alpha);
117 return numer / denom;
120 float_t df(float_t y)
const override {
121 return y * (float_t(1) - y);
124 virtual vec_t df(
const vec_t& y,
size_t index)
const override {
125 vec_t v(y.size(), 0);
126 for (
size_t i = 0; i < y.size(); i++)
127 v[i] = (i == index) ? df(y[index]) : -y[i] * y[index];
132 virtual bool one_hot()
const override {
return false; }
134 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(0), float_t(1)); }
141 float_t f(
const vec_t& v,
size_t i)
const override {
142 return std::tanh(v[i]);
145 void itef(vec_t& out,
const vec_t& in,
size_t cnt)
const {
146 for (
size_t i = 0; i < cnt; i++) {
147 out[i] = std::tanh(in[i]);
158 float_t df(float_t y)
const override {
return float_t(1) - sqr(y); }
159 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(-0.8), float_t(0.8)); }
177 float_t f(
const vec_t& v,
size_t i)
const override {
178 const float_t ep = std::exp(v[i]);
179 return ep / (ep + std::exp(-v[i]));
182 float_t df(float_t y)
const override {
return 2 * y *(float_t(1) - y); }
183 std::pair<float_t, float_t> scale()
const override {
return std::make_pair(float_t(0.1), float_t(0.9)); }
Definition: activation_function.h:101
Definition: activation_function.h:34
Definition: activation_function.h:67
Definition: activation_function.h:93
Definition: activation_function.h:83
Definition: activation_function.h:75
Definition: activation_function.h:109
Definition: activation_function.h:137
Definition: activation_function.h:174