File: sigmoid.c

package info (click to toggle)
euslisp 9.27%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 55,344 kB
  • sloc: ansic: 41,162; lisp: 3,339; makefile: 256; sh: 208; asm: 138; python: 53
file content (53 lines) | stat: -rw-r--r-- 1,299 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*****************************************************************
/* sigmoid function for neural network simulator
/* 1989Mar	Matsui T., ETL
/* 1990Apr	sigmoidx is added,
/*		load with :ld-option "-lm" to link tanh
/****************************************************************/

#include "eus.h"

static pointer SIGMOID(ctx,n,argv)
context *ctx;
int n;
pointer argv[];
{ float x;
  double exp();
  x=fltval(argv[0]);
  return(makeflt(1.0/(1.0+exp(-x))));}

pointer SIGMOIDX(ctx,n,argv)
context *ctx;
int n;
pointer argv[];
{ double x,u,s,th1,th2;
  double exp(), tanh();
  x=ckfltval(argv[0]); u=ckfltval(argv[1]);
  th1=ckfltval(argv[2]); th2=ckfltval(argv[3]);
  s=0.5*(1.0+tanh(x/u));
  if (s<th1) return(makeflt(th1));
  else if (s>th2) return(makeflt(th2));
  else return(makeflt(s));}

pointer OFFSET_VECTOR(ctx,n,argv)
context *ctx;
register int n;
register pointer argv[];
{ pointer v=argv[0];
  float x=ckfltval(argv[1]), *f;
  ckarg(2);
  if (!isfltvector(v)) error(E_FLOATVECTOR);
  f=v->c.fvec.fv;
  n=vecsize(v);
  while (--n>=0) f[n]+=x;
  return(v);}

pointer sigmoid(ctx,n,argv)
context *ctx;
int n;
pointer argv[];
{ pointer mod=argv[0];
  defun(ctx,"SIGMOID",mod,SIGMOID,NULL);
  defun(ctx,"SIGMOIDX",mod,SIGMOIDX,NULL);
  defun(ctx,"OFFSET-VECTOR",mod,OFFSET_VECTOR,NULL);}