質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

624閲覧

NumPyを用いたNOTゲートの作成

mikoto115

総合スコア2

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/20 12:37

編集2022/11/20 12:45

前提

Pythonで単純パーセプトロンに誤り訂正学習法を組み合わせたNOTゲートの学習を行うプログラムを作っています。

実現したいこと

『乱数を用いてNOTゲートの入力(論理値(0,1)の組)と出力の組を10000組作り、配列data1に保存すし、戻り値に配列data1を返す』という動作を関数で定義する。

発生している問題

NOTゲートが作れない

該当のソースコード

Python

1# NOTゲートの誤り訂正学習 2import numpy as np 3 4#データ作成 5def preparedata(kk): 6 kk = 10000 7 nn = 2 8 xx = np.random.randint(0,2, (kk, nn)) 9 yy = xx[:, 0] ~ xx[:, 1] 10 return deta1 11 12# 重みの学習 13def weightlearning(wwold, errork, xxk, eta): 14 wwnew = wwold + eta*errork*xxk 15 16 return wwnew 17 18# 線形結合器 19def linearcombiner(ww, xxk): 20 y = np.dot(ww,xxk) 21 22 return y 23 24# 平均誤り 25def checkerrorrate(error, shiftlen, k): 26 if(k>shiftlen): 27 errorshift = np.abs(error[k+1-shiftlen:k]) 28 else: 29 errorshift = np.abs(error[0:k]) 30 errorave = np.average(errorshift) 31 32 return errorave 33 34# ステップ関数 35def stepfunction(x): 36 if x>=0: 37 return 1 38 else: 39 return 0 40 41# メイン関数 42def main(): 43 eta = 5.0e-1 44 epsilon = 0.001 45 shiftlen = 100 46 # データを読み込む. 47 notgatedata = deta1 48 xx = notgatedata["x"] 49 kk, nn = xx.shape 50 one = np.ones([kk,1]) 51 xx = np.concatenate((one, xx), 1) 52 kk, nn = xx.shape 53 zztrue = notgatedata["y"] 54 print("zztrue size=", zztrue.shape) 55 # 繰返し:学習過程 56 wwold = [0.0, 0.0, 0.0] 57 error = np.zeros(kk) 58 errorave = np.zeros(kk) 59 ww = np.empty([kk,nn]) 60 for k in range(kk): 61 yyk = linearcombiner(wwold, xx[k]) 62 zzk = stepfunction(yyk) 63 error[k] = zztrue[k] - zzk 64 errorave[k] = checkerrorrate(error, shiftlen, k) 65 print("k={0} zztrue={1:.4f} zz={2:.4f} errorave={3:.8f}".format(k, zztrue[k], zzk, errorave[k])) 66 if(k>shiftlen and errorave[k]<epsilon): 67 break 68 wwnew = weightlearning(wwold, error[k], xx[k], eta) 69 wwold = wwnew 70 ww[k,:] = wwold 71 # 重みの学習結果を表示 72 print("重みの学習結果: w0=", wwold[0], "w1=", wwold[1], "w2=", wwold[2]) 73

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/11/20 12:53 編集

yy = xx[:, 0] ~ xx[:, 1] ではなくて、 yy = np.logical_not(xx).astype(int) ではないでしょうか。
mikoto115

2022/11/20 13:52

NOTゲートの問題が解決できました。ありがとうございます。ただ、悪さをしてるのはどうやら戻り値のところかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問