Python でシンプルなニューラル ネットワークを作成する方法 (コード付き)

Python でシンプルなニューラル ネットワークを作成する方法 (コード付き)

[[251984]]

ニューラル ネットワークの仕組みを理解する最良の方法は、自分でニューラル ネットワークを作成することです。この記事では、その方法を説明します。

ニューラル ネットワーク (NN) は、人工ニューラル ネットワーク (ANN) とも呼ばれ、生物学的ニューラル ネットワークの概念に基づいた機械学習分野の学習アルゴリズムのサブセットです。

5 年以上の経験を持つドイツの機械学習の専門家、Andrey Bulezyuk 氏は、次のように主張しています。「ニューラル ネットワークは、幅広い分野や業界にわたって抽象的なオブジェクトを効率的にモデル化できるため、機械学習に革命をもたらしています。」

人工ニューラル ネットワークは基本的に次のコンポーネントで構成されます。

  • 入力層: データの受信と受け渡し
  • 隠しレイヤー
  • 出力層
  • レイヤー間の重み
  • 各隠れ層には活性化関数があります。このシンプルなニューラル ネットワーク Python チュートリアルでは、シグモイド活性化関数を使用します。

ニューラルネットワークには多くの種類があります。このプロジェクトでは、フィードフォワードまたはパーセプトロン ニューラル ネットワークを作成します。このタイプの ANN は、データを前方から後方へ直接渡します。

フィードフォワード ニューロンのトレーニングには、多くの場合、ネットワークに対応する入力と出力のセットを提供するバックプロパゲーションが必要です。入力データがニューロンに送信されると、処理されて出力が生成されます。

次の図は、単純なニューラル ネットワークの構造を示しています。

ニューラル ネットワークの仕組みを理解する最良の方法は、ライブラリを使用せずに、ニューラル ネットワークをゼロから構築する方法を学ぶことです。

この記事では、Python プログラミング言語を使用して単純なニューラル ネットワークを作成する方法を説明します。

質問

以下に問題を示す表を示します。

新しいデータセットを提供し、それを使用してニューラル ネットワークをトレーニングし、正しい出力値を予測できるようにします。

上記の表に示すように、出力値は常に入力セクションの最初の値と等しくなります。したがって、出力値は 1 になると予想されます。

Python コードを使用して同じ結果を得られるかどうか確認してみましょう (このプロジェクトを続ける前に、この記事の最後でこのプロジェクトのコードを確認できます)。

NeuralNetworkクラスを作成する

正確な予測ができるようにニューロンをトレーニングするために、Python で NeuralNetwork クラスを作成します。このクラスには他のヘルパー関数も含まれます。

この単純なニューラル ネットワークの例ではニューラル ネットワーク ライブラリを使用しませんが、計算を支援するために numpy ライブラリをインポートします。

numpy ライブラリは、次の 4 つの重要なメソッドを提供します。

  • exp—自然指数を生成するために使用
  • 配列—行列を生成するために使用
  • ドット—行列の乗算
  • random — 乱数を生成するために使用されます。有効な分布になるように乱数を生成することに注意してください。

1. シグモイド関数を適用する

ニューラル ネットワークの活性化関数として、シグモイド関数を使用して特徴的な「S」曲線を描画します。

この関数は、任意の値を 0 から 1 の間の値にマッピングすることができ、入力の重み付けと正規化に役立ちます。

この後、重みの調整パラメータを計算するために、シグモイド関数の導関数を作成します。

シグモイド関数の出力は、その導関数を生成するために使用できます。たとえば、出力変数が「x」の場合、その導関数は x*(1-x) になります。

2. モデルのトレーニング

これは、ニューラル ネットワークに正確な予測を行うように教える段階です。各入力には重みがあり、重みは正または負になります。つまり、正または負の重みが大きい入力は、結果の出力に大きな影響を与えます。最初に、各乱数に重みを割り当てることから始めたことを思い出してください。

この例のニューラル ネットワークのトレーニング プロセスは次のとおりです。

ステップ 1: トレーニング データセットから入力を抽出し、トレーニング データセットの重みに応じて調整し、ニューラル ネットワークの出力を計算する方法を通じてフィルタリングします。

ステップ 2: バックプロパゲーション エラー率を計算します。この場合、それはニューロンの予測出力とトレーニング データセットの予想出力の差です。

ステップ 3: 誤差加重微分式を使用して、得られた誤差範囲に基づいて、いくつかの小さな重み調整が行われました。

ステップ 4: このプロセスを 15,000 回繰り返します。各反復では、トレーニング セット全体が同時に処理されます。

マトリックスを水平位置から垂直位置に変換するには、「.T」関数を使用します。したがって、数値は次のように保存されます。

最終的に、ニューロンの重みは提供されたトレーニング データに基づいて最適化されます。その後、ニューロンに以前の状態と同じ新しい状態を考慮するように要求すると、正確な予測を行うことができます。これがバックプロパゲーションの仕組みです。

パッケージ化して実行

***、NeuralNetwork クラスが正常に初期化されたら、コードを実行できます。

Python プロジェクトでニューラル ネットワークを作成する方法の完全なコードは次のとおりです。

  1. numpyをnpとしてインポートする 
  2. クラスNeuralNetwork():  
  3. __init__(self)を定義します。  
  4. # 乱数生成のためのシード 
  5. np.ランダムシード(1)  
  6. #重みを、値が-1から1で平均が0の3行1列の行列に変換します 
  7. 自己シナプス重み= 2 * np.random.random((3, 1)) - 1  
  8. シグモイドの定義(自己、x):  
  9. #シグモイド関数の適用 
  10. 1 / (1 + np.exp(-x)) を返します。  
  11. sigmoid_derivative(self, x)を定義します。  
  12. #シグモイド関数の導関数を計算する 
  13. x * (1 - x) を返す 
  14. def train(self, トレーニング入力, トレーニング出力, トレーニング反復):  
  15. #重みを継続的に調整しながら正確な予測を行うようにモデルをトレーニングする 
  16. 範囲内の反復(training_iterations):  
  17. #ニューロンを介してトレーニングデータを吸い上げる 
  18. 出力= self.think (training_inputs)  
  19. #バックプロパゲーションのエラー率を計算する 
  20. エラー=トレーニング出力- 出力 
  21. #体重調整を行う 
  22. 調整= np .dot(training_inputs.T, error * self.sigmoid_derivative(出力))  
  23. self.synaptic_weights += 調整 
  24. def think(self, inputs):  
  25. #入力をニューロン経由で渡して出力を得る 
  26. #値を浮動小数点数に変換する 
  27. 入力inputs = inputs.astype(float)  
  28. 出力= self .sigmoid(np.dot(入力, self .synaptic_weights))  
  29. 出力を返す 
  30. __name__ == "__main__" の場合:  
  31. #ニューロンクラスの初期化 
  32. neural_network =ニューラルネットワーク()  
  33. print("ランダムに生成された最初の重み: ")  
  34. 印刷(ニューラルネットワーク.シナプスの重み)  
  35. #4つの例からなるトレーニングデータ - 3つの入力値と1つの出力 
  36. トレーニング入力= np.array([[0,0,1],  
  37. [1,1,1],  
  38. [1,0,1],  
  39. [0,1,1]])  
  40. トレーニング出力= np .array([[0,1,1,0]]).T  
  41. #トレーニング実施中 
  42. ニューラルネットワーク.train(トレーニング入力、トレーニング出力、15000)     
  43. print("トレーニング後の終了重み: ")  
  44. 印刷(ニューラルネットワーク.シナプスの重み)     
  45. user_input_one = str (input("ユーザー入力1: "))  
  46. user_input_two = str (input("ユーザー入力2: "))  
  47. user_input_three = str (input("ユーザー入力3: "))   
  48. print("新しい状況を検討中: ", user_input_one, user_input_two, user_input_three)  
  49. print("新しい出力データ: ")  
  50. 印刷(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))  
  51. print("わあ、やったね!")

コードを実行した後の出力:

このようにして、単純なニューラル ネットワークを作成することに成功しました。

ニューロンは最初にランダムな重みを割り当て、次にトレーニング例を使用して自分自身をトレーニングします。

その後、新しい状態[1,0,0]が出現すると、0.9999584と評価されます。

正解は 1 にしたかったことを覚えていますか?

この値は非常に近く、シグモイド関数の出力値は 0 から 1 の間になります。

もちろん、この例では、単純なタスクを実行するために単一のニューラル ネットワークのみを使用します。何千もの人工ニューラルネットワークを接続すると何が起こるでしょうか?人間の思考方法を完全に模倣することはできるでしょうか?

<<:  Baidu AIは素晴らしいキャンパスライフに新たなタッチを加え、新学期をより技術的に

>>:  自動運転、ニューメディア、農業、エネルギー、医療、工業などの垂直産業における 5G の重要な役割をシンプルかつ深く理解するにはどうすればよいでしょうか。

ブログ    
ブログ    

推薦する

救世主か、それとも公敵か? 人工知能の現在と未来を説明する記事

囲碁チャンピオンのイ・セドルを破ったロボット「アルファ碁」から、卓球ができるKUKAロボット、遠隔手...

梅の花の山の上を歩くロボット犬?自転車は自分でバランスをとることができますか?テンセント・ロボティクスXラボ研究初の「開封」

テンセントは11月20日、移動ロボット研究における新たな進展を発表し、四足移動ロボット「ジャモカ」と...

人工知能が人間に危害を加えた場合、誰が責任を負わされるのでしょうか?

[[351390]]コインの表裏のように、技術の進歩は人々の生産と生活を促進する一方で、深刻な実際...

韓国が世界初の常温超伝導体を開発? 127度での超伝導、再現できればノーベル賞確実

常温・常圧超伝導が再び突破された?今回は韓国の科学者たちです。彼らは、世界初の常温常圧超伝導体、すな...

企業がAIベースのツールを使用して脆弱性を管理する方法

脆弱性の管理は、セキュリティ専門家にとって最優先事項の 1 つです。セキュリティ チームは、サイバー...

自動運転車の未来に関するレポート:乗用車の95%が消滅し、7兆ドルの旅行市場に4つの大きなチャンスがある

[[199334]]自動運転車は20年以内に世界経済を劇的に変え、保険、メディア、セキュリティ、物流...

TPCアライアンス設立:科学的発見の推進に向け、1兆以上のパラメータを持つAIモデルを目指す

11月16日、業界をリードする科学研究機関、米国国立スーパーコンピューティングセンター、そしてAI分...

ワンクリックで漫画に変身!流行のDouyin特殊効果の背後にある技術

昨日、李栄浩は目が小さいことで再び注目を集めた。 「特殊効果では李容浩の目は大きくできない」というト...

GPT-4V でさえ解明できない未来推論の解決策があります!華中科技大学と上海理工大学出身

マルチモーダル大規模言語モデルは、強力な画像理解および推論機能を発揮します。しかし、現在の観察に基づ...

顔認識はどのように実現されるのでしょうか? コンピューターはカメラを通じてどのように私たちの身元を識別するのでしょうか?

携帯電話を使って顔をスキャンして支払いをするとき、会社の入退室管理を通過するとき、あるいは道路を運転...

アルゴリズムが力を発揮します!なぜ人間と人工知能はますます似てきているのでしょうか?

[[256247]]アルゴリズムは私たちにどう考えるべきかを教え、それが私たちを変えています。コン...

モバイルロボットソフトウェアの自動テストの課題への対応

自動化されたモバイル ホーム ロボットの複雑さを探り、セットアップの特有の課題と制約の克服に焦点を当...

...

人工知能を使用して自動化されたデータセンターを構築する方法

現在、人工知能 (AI) に関する議論のほとんどは、自動運転車、チャットボット、デジタル ツイン、ロ...