0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C言語でゼロから作る機械学習♯01.5【排他的論理和 ~XOR~ |ヘッダーファイル作成】

Posted at

今回はXORの説明と今までに作成した関数を切り取り、ヘッダーファイルにするという事をやっていきます。
コードはこちら

XOR|排他的論理和

XOR、入力層1層・中間層1層・出力層1層の多重パーセプトロンとして考えることのできる排他的論理和をとても簡単に作っていきましょう。 プロトタイプ宣言を他の関数の下にして、
int XOR(int p, int q);

関数のプログラムは~↓

int XOR(int p, int q){
  return AND(OR(p,q)*W+b,NAND(p,q)*W+b);
}

こう! はい、完成。
XORは中間層にORとNANDの2つのニューロンを持ち、ANDという出力層を持つ多重パーセプトロンとして考えることができます。
なので今までに制作した関数を上記コードのように組み合わせることで簡単に作ることができちゃいます!
あとは、

  printf("AND \t OR \t NAND \t NOR \t XOR\n");
  printf("%d \t %d \t %d \t %d \t %d\n\n",AND(in1,in2), OR(in1,in2), NAND(in1,in2), NOR(in1,in2), XOR(in1,in2));

というように論理式の結果を表示する部分を上記のようなプログラムに書き換えて表示させてみましょう。
今回追加した分は「firstprogX」として新しいアプリを作っています。
image.png
XORが実現できました~!

ヘッダーファイルの作成

多重パーセプトロンになってくるとプログラムが大きくなってしまうので複数のプログラムに分けようと思います。 ひとまず、今回制作した論理回路の関数を切り取ってみましょう。

関数の切り取り

本来ならば、ヘッダーファイル(logic.h)とその関数を記述したサブプログラムファイル(logic.c)を作って分割コンパイルするのがいいのでしょうが、個人的にはヘッダーファイルにまとめてしまいます。 ここはそれぞれのやり方でファイルを作成してくださいね。

切り取り自体は簡単です。
今までのプログラムコードですと下に書いていた関数群を選択し、そのままCtrl+xで切り取って
新しくlogic.hなどというファイルを作成、貼り付けて
それらのコードの上の行に

# ifndef LOGIC_H   //二重インクルード防止
# define LOGIC_H

# define W 1
# define b 0

を記述すればヘッダーファイルは完成です。
あとはメインのプログラムから重みとバイアスの定義・プロトタイプ宣言の行を削除して、#include "logic.h" で作成したヘッダーファイルをインクルードするよと記述して完了です。
今回のプログラムは「secondprog.c」としました。
コンパイルと実行の様子はこのような感じです。
image.png

さいごに

2021年7月20日時点では簡単な説明で…… 時間がありましたら、図なども使用してもっと説明を追加しようと思います。 それではまたどこかの記事で会いましょう。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?