zoukankan      html  css  js  c++  java
  • 单个人工神经元的实现

    人工神经元

    神经元是构成神经网络的最基础单元

    网络结构:

    人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。

    输入数据采用二维数组data[][]存储,输入4组输入数据(0,0) (0,1) (1,0) (1,1)。

    计算人工神经元的程序的处理步骤如下:
    单个人工神经元对于输入信号计算输出值的计算步骤
    ( 1 )初始化权重和阈值。
    ( 2 ) 读入输入数据。
    ( 3 )对于所有的输入数据进行如下计算。
          ( 3-1 )将输入值和对应的权重相乘后合并。
          ( 3-2 )减去阈值。
          ( 3-3 )利用传递函数来计算输出值。

     运行环境VS2019

      1 /*
      2   单个人工神经元
      3   输入数(2输入)
      4 传递函数的种类(阶梯函数、sigmoid函数)
      5 各个输入所对应的权重Wi;
      6 阈值v
      7 */
      8 /*Visual Studio的互换性保证 */
      9 #define _CRT_SECURE_NO_WARNINGS
     10 
     11 
     12 #include<stdio.h>
     13 #include<stdlib.h>
     14 #include<math.h>
     15 
     16 #define INPUT 2  /*输入数*/ 
     17 #define MAXINPUT 100    /*数据的最大个数*/
     18 
     19 
     20 //初始化权重
     21 void init_weight(double W[])
     22 {
     23     /*给权重和阈值固定的值*/
     24     W[0] = 1;
     25     W[1] = 1;
     26     W[2] = 1.5;//存放阈值
     27 }
     28 
     29 int getdata(double data[][INPUT])
     30 {
     31     int number = 0;
     32     int j = 0;
     33 
     34     printf("请输入数据
    ");
     35     //数据输入
     36     while (scanf("%lf", &data[number][j]) != EOF)
     37     {
     38         ++j;
     39         if (j >= INPUT)
     40         {/*下一个数据*/
     41             j = 0;
     42             ++number;
     43         }
     44 
     45     }
     46     printf("输入数据完成
    ");
     47     return number;
     48 }
     49 
     50 
     51 double f(double u)
     52 {
     53     /*阶梯函数的计算*/
     54     if (u >= 0) return 1.0;
     55     else return 0.0;
     56 
     57     /*sigmoid函数的计算*/
     58    // return 1.0/(1.0+exp(-u)) ;
     59 }
     60 
     61 
     62 double forward(double W[INPUT+1], double data[INPUT])
     63 {
     64     int i;/*循环的控制*/
     65     double u, z;/*中间的计算值u和输出值o*/
     66 
     67     /*计算主体*/
     68     u = 0;
     69     for (i = 0; i < INPUT; ++i)
     70         u += data[i] * W[i];
     71     u -= W[i];/*阈值的处理*/
     72     /*输出值的计算*/
     73     z = f(u);
     74     return z;
     75 }
     76 
     77 
     78 
     79 
     80 int main()
     81 {
     82     double W[INPUT + 1];
     83     double data[MAXINPUT][INPUT];  //数据
     84     double z;//输出
     85     int number;//数据个数
     86 
     87     init_weight(W);
     88     /*读入输入数据*/
     89     number = getdata(data);
     90     printf("数据的个数:%d
    ", number);
     91 
     92     /*计算的主体*/
     93     for (int i=0;i<number; ++i)
     94     {
     95         printf("%d ", i);
     96         for (int j = 0; j < INPUT; ++j)
     97             printf("%lf ", data[i][j]);
     98         z = forward(W, data[i]);
     99         printf("%lf
    ", z);
    100     }
    101 
    102     return 0;
    103 
    104 }

      结果与AND逻辑运算相同

    要注意的是:在终端(黑框)中手动输入时,系统并不知道什么时候到达了所谓的“文件末尾”,因此需要用<Ctrl + z>组合键然后按 Enter 键的方式来告诉系统已经到了EOF,这样系统才会结束while。

    在VS中,三组<Ctrl+z>和Enter 键,跳出while循环。

  • 相关阅读:
    第13周作业集
    软件工程结课作业
    第13次作业--邮箱的正则表达式
    第12次作业--你的生日
    第11次作业
    第10次作业
    找回感觉的练习
    第16周作业
    第15周作业
    第14周作业
  • 原文地址:https://www.cnblogs.com/liweikuan/p/14192791.html
Copyright © 2011-2022 走看看