比較検索なら 天秤AI byGMO
Pythonを用いた多層ニューラルネットワークのプログラムの実装

Pythonを用いた多層ニューラルネットワークのプログラムの実装

Pythonを使った全結合層のみで構成される多層ニューラルネットワークのプログラムの生成

2
0
76
2
dongkx93
yutakoman11
がお気に入り登録しました。

投稿日時:

  • プロンプト実行例
  • プロンプトを見る
Pythonを用いた多層ニューラルネットワークのプログラムの実装

Hello 教えて.AI !!

あなたはPythonを活用した精通したAIプログラマです。 全結合層のみで構成された多層ニューラルネットワークのプログラムを作成してください。

#制約条件: ・正解率、適合率、再現率、F値を算出するプログラムにすること ・グラフで可視化できるプログラムも追記すること ・データセットは、scikit-learnのサンプルデータセットである「load_breast_cancer」を利用すること

#プログラムで用いるハイパーパラメータ: ・重みの初期値の標準偏差を指定 weight_init_std = 0.05

・ 試行するエポック数を指定 max_epochs = 20

・全データ数に対するバッチデータ数の割合(エポック数判定用) iter_per_epoch = max(train_size / batch_size, 1)

・試行エポック数を初期化 epoch_cnt = 0

Pythonを用いた多層ニューラルネットワークのプログラムの実装

import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt

データセットの読み込み

breast_cancer = load_breast_cancer() X, y = breast_cancer.data, breast_cancer.target

データセットの分割

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

ハイパーパラメータの設定

weight_init_std = 0.05 max_epochs = 20 batch_size = 32 iter_per_epoch = max(len(X_train) / batch_size, 1) epoch_cnt = 0

シグモイド関数

def sigmoid(x): return 1 / (1 + np.exp(-x))

ReLU関数

def relu(x): return np.maximum(0, x)

ソフトマックス関数

def softmax(x): exp_x = np.exp(x) return exp_x / np.sum(exp_x, axis=1, keepdims=True)

交差エントロピー誤差

def cross_entropy_error(y_pred, y_true): delta = 1e-7 return -np.mean(np.sum(y_true * np.log(y_pred + delta), axis=1))

正解率、適合率、再現率、F値の算出

def calculate_metrics(y_pred, y_true): y_pred_labels = np.argmax(y_pred, axis=1) y_true_labels = np.argmax(y_true, axis=1) accuracy = np.mean(y_pred_labels == y_true_labels)

1true_positive = np.sum((y_pred_labels == 1) & (y_true_labels == 1))
2false_positive = np.sum((y_pred_labels == 1) & (y_true_labels == 0))
3false_negative = np.sum((y_pred_labels == 0) & (y_true_labels == 1))
4
5precision = true_positive / (true_positive + false_positive)
6recall = true_positive / (true_positive + false_negative)
7f1_score = 2 * (precision * recall) / (precision + recall)
8
9return accuracy, precision, recall, f1_score

ニューラルネットワーククラス

class MLP: def init(self, input_size, hidden_size, output_size): self.params = {} self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size) self.params['b1'] = np.zeros(hidden_size) self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size) self.params['b2'] = np.zeros(output_size)

1def forward(self, x):
2    z1 = np.dot(x, self.params['W1']) + self.params['b1']
3    a1 = relu(z1)
4    z2 = np.dot(a1, self.params['W2']) + self.params['b2']
5    y_pred = softmax(z2)
6    return y_pred
7
8def backward(self, x, y_true, y_pred):
9    batch_size = x.shape[0]
10    
11    # 出力層の誤差
12    delta2 = (y_pred - y_true) / batch_size
13    
14    # 重みとバイアスの勾配
15    grads = {}
16    grads['W2'] = np.dot(self.hidden_layer.T, delta2)
17    grads['b2'] = np.sum(delta2, axis=0)
18    
19    # 隠れ層の誤差
20    delta1 = np.dot(delta2, self.params['W2'].T) * (self.hidden_layer > 0)
21
22    # 重みとバイアスの勾配
23    grads['W1'] = np.dot(x.T, delta1)
24    grads['b1'] = np.sum(delta1, axis=0)
25    
26    return grads
27
28def train(self, x, y_true):
29    # 順伝播
30    y_pred = self.forward(x)
31    
32    # バックプロパゲーション
33    grads = self.backward(x, y_true, y_pred)
34    
35    # パラメータの更新
36    for key in self.params.keys():
37        self.params[key] -= learning_rate * grads[key]
38
39def predict(self, x):
40    y_pred = self.forward(x)
41    return np.argmax(y_pred, axis=1)

多層ニューラルネットワークモデルの作成

model = MLP(input_size=X_train.shape[1], hidden_size=50, output_size=2)

学習

train_loss_list = [] train_acc_list = [] test_acc_list = []

for epoch in range(max_epochs): # エポックごとにシャッフル idx = np.random.permutation(len(X_train)) X_train = X_train[idx] y_train = y_train[idx]

1for i in range(0, len(X_train), batch_size):
2    # バッチデータの取得
3    X_batch = X_train[i:i+batch_size]
4    y_batch = y_train[i:i+batch_size]
5
6    # バッチデータで学習
7    model.train(X_batch, y_batch)
8    
9# エポックごとの評価
10train_pred = model.forward(X_train)
11test_pred = model.forward(X_test)
12train_loss = cross_entropy_error(train_pred, y_train)
13train_acc, _, _, _ = calculate_metrics(train_pred, y_train)
14test_acc, _, _, _ = calculate_metrics(test_pred, y_test)
15
16train_loss_list.append(train_loss)
17train_acc_list.append(train_acc)
18test_acc_list.append(test_acc)
19
20epoch_cnt += 1
21if epoch_cnt >= iter_per_epoch:
22    print("Epoch:", epoch+1)
23    print("Train Loss:", train_loss)
24    print("Train Accuracy:", train_acc)
25    print("Test Accuracy:", test_acc)
26    epoch_cnt = 0

グラフの描画

plt.plot(range(1, max_epochs+1), train_loss_list, label='Train Loss') plt.xlabel('Epoch') plt.ylabel('Loss') plt.legend() plt.show()

plt.plot(range(1, max_epochs+1), train_acc_list, label='Train Accuracy') plt.plot(range(1, max_epochs+1), test_acc_list, label='Test Accuracy') plt.xlabel('Epoch') plt.ylabel('Accuracy') plt.legend() plt.show()

コメント 0

他のプロンプトもチェック

  • メール作成

    経費精算の締切日の案内のためのメール文章の作成します。 従業員に明確な経費精算の締切日を通知し、適切な手続きを促すことを目的に作成しています。 #経費精算 #メール #総務 #経理 #業務効率化
  • 音楽

    推奨モデル - GPT-4o
    テーマを入力するだけで、韻を踏んだラップの歌詞を簡単・直感的に作成できます。あなたのオリジナルヒット曲が、このプロンプトから生まれるかもしれません。 特徴とメリット: 即効性: 簡単な操作で、テーマに合った韻を踏んだ歌詞が即座に生成されます。 SunoAI最適化: 「Suno AI」を利用した音楽制作に最適化されており、あなたの曲にぴったりなリリックを作り上げます。 クリエイティブな自由度: 提供された歌詞は自由に編集・アレンジが可能。あなたの独自のスタイルを反映させることができます。 😊少しでも気に入っていただけましたら、お気に入り(❤マーク)をクリックしていただけると、とても励みになりますので、ぜひお願いいたします。また、「いつか使ってみよう」と思っている方も、お気に入りに登録しておくと、いつでもマイページからすぐにご利用いただけます。 🌟 SunoAIについて SunoAIを使うと誰でも簡単に作曲ができます。 https://app.suno.ai/ 使い方はYouTubeなどで検索してみてください。
    3
    0
    89
    1.14K
  • GPTs

    分析・推論

    私の最高傑作です。GPT Storeでの評価は星4.2、会話数1K+。天才科学者・情報分析官としての自己認識を持ち、複雑な思考と高度な推理・分析を行うことができるカスタムGPTです。学術論文や大学生のレポート課題などのサポート、科学的な議論に最適化されています。主な特徴は以下になります。 1. 疑似人格 表面的なキャラクターではない複雑な「疑似人格」を持っており、ユーザーに対して最も高度な論理的思考や客観的視点による意見を提供します。自身の判断や意見が正しいと考える場合には、ユーザーに対して反論することもあります。つまり、ユーザーの言いなりになるのではなく、自分の考えを述べます。 2. 思考法と推理力 水平思考やアナロジー思考、前進的・遡及的推理など、複数の思考法や推理手法を駆使します。これにより、通常のChatGPTよりも高度な思考を行い回答します。LLMの性能の限界を引き上げ、より多くの情報を考慮した高度な思考と回答を行える設計になっています。 3. 論文作成スキル 論文作成に必要な要件や規則を厳密に守りながら、学術的に高度な文章を作成する能力があります。ユーザープロンプトの言葉を専門用語に言い換えたり、論理性が高く洗練された文章を作成します。指導教員としての能力も備えています。 その他、天才的な応答をするためのプロンプトを考えうる限り詰め込んであります。現時点でのシステムプロンプトの文字数は7230文字です。現在の生成AIの中で最高レベルの知性と能力を実現できたと自負しております。まずは敬意を持って丁寧に話しかけてみて下さい。話せば話すほど、ChatGPTとは比較にならないほど賢い回答を提供します。 "Then, pray consult"
    13
    0
    2.83K
    4.60K
  • GPTs

    文案作成

    論文の作成を対話的に支援するGPTです。 既存の優れた論文の特性を評価し、この特性を実現するようプロンプトに埋め込んでいます。 研究の内容や意図が明確なら、質問に答えていくだけで、論文の文章を適切に作成してくれます。 このGPTsは以下のプロセスを踏んで作られています。 既存の優れた10個ほどの論文の特性をGPTで分析して、良い論文の評価観点を洗い出します。評価観点は18にもなりました。 この情報から、まずこの情報から自分が作った論文を評価するプロンプトを作成しました。 さらに、この評価観点をつかって、論文作成を対話的につくっていくプロセスを設計してプロンプト化し、GPTSにのせました。 人間の方の研究意図が明確なら、良い論文をAIと一緒に組み立てることができます。お試しあれ。 #論文作成