深度学习入门初探——C语言版的激活函数

        这个系列的学习,基本上没有使用过多Python依赖的库和第三方工具,更没有使用目前较火的框架(tf、pytorch、caffe)等,更多的采用了numpy。下面是Python版的激活函数:

深度学习入门初探——简单的激活函数


        C语言是过去几十年软件和硬件两个阵营之间签署的最坚实的契约。硬件为C语言的语义提供了最能发挥其性能的基础构件,而软件虽然搞了很多的圆环套圆环般的层次,但最终都以C语言作为最后的沉淀收尾。

        现在比较火爆的tf,即是Google基于高层IR表达,抽象出在AI领域内的公共编程模型,聚焦此高层IR表达实现了一个framework框架,形成了Python生态的高价值工具集合。

        这一波的火爆,吸引并影响了更多的软件、硬件同学参与到硬件架构中,想为为未来的几十年定下下一轮的契约,每一个 IT 公司都希望这份新的契约是以自己为中心的。以 Google 为首,代表着 AI 为创新源头的新兴势力。高层IR抽象的framework,即框架在 AI 领域的成功,让集中在这个领域的高密度人才携其创造的高密度思想结晶,希望像 AI 的泛化能力一样,把 framework 的思维方式泛化到其他编程领域。说白了,这个流派希望破旧立新,重新制定软硬件的契约,把 C 变成 Python。


        我们自己还是造的轮子太少,积累少得可怜,如果倪光南院士早些年的想法(芯片和操作系统)在当时付诸实践了,也许我们也会有很多自己的轮子,那时的计算机科学还没有那么完善的生态,我们应该是可以立足的。

        现在选择在头条号上学习记录,主要原因是字节跳动和“漂亮国”干过架。下面是一个自己会围绕其工作和学习的框架,现在主要还是在第5层上干活,但已经触及了下面几层了,后续的学习记录也会一一的涉及到:

自理的所谓异构融合


        浅话到此,关于深度学习源码,以后都会有Python版和C语言版,后续学习rust和go语言的时候,如果精力上可以的话也会陆续更新。


        因为初步刚刚开始,一切从简了,图示几个简单的文件:

        functions.c functions.h option.h unstd.h 函数的定义以及涉及到的数据结构后续都会集中在这几个文件中。

        Makefile test_func.c make脚本和测试代码。

深度学习入门初探——C语言版的激活函数_第1张图片

 

#ifndef _UNSTD_
#define _UNSTD_

#define EPS 1e-7

typedef int      ctrovar; /* control variable  */
typedef float    datavar; /* data    variable  */


#endif /* unstd.h  */
#ifndef _OPTION_
#define _OPTION_


#define    USE_32FLOAT  /* 32bit-precision floating-point  */
/*#define    USE_64FLOAT*/  /* 64bit-precision floating-point  */
/*#define    USE_128FLOAT*/ /* 128bit-precision floating-point */


#endif /* option.h  */
/*!
 *****************************************************************************
 * \file
 *  functions.h
 *
 * \brief
 *  function 
 *
 * \version  
 *  0.1 - 2021/11/28 19:10:20: Initial Version
 *
 * \author
 *  cy
 *****************************************************************************
 */


#ifndef _FUNCTION_
#define _FUNCTION_

#include 
#include "unstd.h"
#include "option.h"

#ifdef __cplusplus
extern "C" {
#endif


void StepFunc(datavar *src, datavar *dst, ctrovar length);
void SigmoidFunc(datavar *src, datavar *dst, ctrovar length);
void ReluFunc(datavar *src, datavar *dst, ctrovar length);

#ifdef __cplusplus
}
#endif              

#endif  /* functions.h  */         

/*!  
 *****************************************************************************
 * \file                                     
 *  functions.c                
 *                                       
 * \brief                                   
 *  functions
 *  
 * \version  
 *  0.1 - 2021/11/28 19:10:20: Initial Version
 *
 * \author                                     
 *  cy
 *****************************************************************************
 */


#include "functions.h"


#ifdef __cplusplus
extern "C" {
#endif


/*
 * 
 * function name: step function
 *        param : datavar *src    source data address
 *        param : datavar *dst    destination data address
 *        param : ctrovar length  data length
 */
void StepFunc(datavar *src, datavar *dst, ctrovar length)
{
    ctrovar i = 0;
    for(i=0; i(0+EPS) )
            *dst++ = 1.0;
        else
            *dst++ = 0.0;
    }
}

void SigmoidFunc(datavar *src, datavar *dst, ctrovar length)
{
    ctrovar i = 0;
    for(i=0; i(0+EPS) )
            *dst++ = src[i];
        else
            *dst++ = 0.0;
    }
}

#ifdef __cplusplus
}
#endif              
#include 
#include 
#include 
#include 





#include "functions.h"


#define N 21
int main() {
    int i = 0;
    int len=N;
    float arrsrc[N];
    float stpdst[N]={0.0};
    float sigdst[N]={0.0};
    float reudst[N]={0.0};

    srand((unsigned)time(NULL));
    for (i = 0; i < N; i++)
        arrsrc[i] = -1.0+0.1*i;/*(rand()%101)*(float)0.01-0.5;*/

    printf("init stpdst=\n");
    for (i=0; i
# 是否加入调试信息
DEBUG=1

# 宏定义
#DEFS = -DOPENCV

VPATH = ./    # 搜索路径
OBJDIR= ./obj/
EXEC  = test_func   # 生成的可执行文件

# 编译器的选择
CC=gcc
#CPP=g++

# FLAGS编译选项
CFLAGS   = -Wall
LDFLAGS  = -lc -lm -lpthread
#CFLAGS += $(DEFS)

ifeq ($(DEBUG), 1) 
OPTS= -O0 -g
else
OPTS= -O2
endif
CFLAGS+= $(OPTS)
#CFLAGS+= -std=c++11

# 头文件和库的包含路径
CFLAGS  +=  -I /usr/include/ \
            -I ./

LDFLAGS += -L /usr/lib/
#LDFLAGS+= \
#       /usr/local/lib/libopencv_highgui.so \
#       /usr/local/lib/libopencv_photo.so \

OBJ=functions.o test_func.o 

OBJS = $(addprefix $(OBJDIR), $(OBJ))
DEPS = $(wildcard *.c *.h) Makefile

#all: obj $(SLIB) $(EXEC)
all: obj $(EXEC)

#$(SLIB): $(OBJS)
#	$(CC) $(CFLAGS) -shared -fPIC $^ -o $@ $(LDFLAGS)

$(EXEC): $(OBJS)
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

$(OBJDIR)%.o: %.c $(DEPS)
	$(CC) $(CFLAGS) -c $< -o $@

obj:
	mkdir -p obj

clean:
	rm -rf $(OBJS) $(SLIB)

你可能感兴趣的:(C,source,code,DeepLearning,深度学习,c语言,神经网络)