28#include "tiny_dnn/util/util.h"
38#ifndef CNN_DEFAULT_MOVE_CONSTRUCTOR_UNAVAILABLE
42#ifndef CNN_DEFAULT_ASSIGNMENT_OPERATOR_UNAVAILABLE
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);
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
Simple image utility class.
Definition image.h:94