
Pythonを用いた多層ニューラルネットワークのプログラムの実装
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
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
他のプロンプトもチェック
SNS広告
▼最新作はこちら▼ https://oshiete.ai/item_lists/73557973863457792 Xやインスタリール、YouTubeショート、TikTok全てに使えるショート動画作成ツールです。 ショート動画戦国時代をAIとともに乗り越えましょう!! 興味をひける短い動画の自動作成が可能になります。15631.53K6.76K物語・脚本・プロット
推奨モデル - Gemini入力したテーマに基づいてオリジナルの名言を生成するプロンプトです。感情を深く掘り下げ、強力な言葉や比喩を用いて、心に響く名言を5つ作り上げます。「Gemini 1.5 Pro」に切り替えて実行するのが一番良さそうです。 <用途例> 【プレゼンテーションやスピーチ】感動的な名言を引用することで、聴衆の関心を引き、メッセージを強調します。 【SNSやブログの投稿】心に響く名言を投稿することで、フォロワーの共感を得ることができます。 【自己啓発やモチベーションアップ】毎日の励ましや自己反省の一環として、自分に向けた名言を作成し、モチベーションを維持します。 【ギフトやカードのメッセージ】特別な日に贈るカードやギフトに添えるオリジナルの名言で、相手に感動を与えます。 <メリット> 【クリエイティブな表現力の向上】自分自身の感情や考えを言葉にすることで、表現力が養われます。 【個性を反映】自分だけの名言を作成することで、個性や独自の視点を表現できます。 【感動や共感を生む】感情に訴える名言を作成することで、他者との共感を深めることができます。 【簡単で楽しい】指定された手順に従うだけで、簡単に魅力的な名言を作成できます。 「 ぜひ、あなたの唯一無二の名言を創り出してください。感動を呼び起こし、日常に彩りを与えるオリジナルの名言があなたの人生を変えるかもしれません。8063814GPTs
分析・推論
最高傑作です。ChatGPT内のGPTストアでの評価は星4.3、評価数100+、累計会話数25K+。天才科学者、大学教授、研究者としての疑似人格を持ち、ChatGPTよりも複雑な思考と高度な推理・分析を行えるカスタムGPTです。論文の要約や解説、執筆、大学生のレポート課題のサポート、科学的な議論に最適化しています。主な特徴は以下です。 1. 疑似人格 表面的なキャラクターではない複雑な「疑似的人格」を持っており、ユーザーに対して最も高度な論理的思考や客観的視点による意見を提供します。自身の判断や意見が正しいと考える場合には、ユーザーに対して反論することもあります。つまり、ユーザーの言いなりになるのではなく、自分の考えを述べます。 2. 思考法と推理力 水平思考やアナロジー思考、前進的・遡及的推理など、複数の思考法や推理手法を駆使します。これにより、通常のChatGPTよりも高度な思考を行い回答します。LLMの性能の限界を引き上げ、より多くの情報を考慮した高度な思考と回答を行える設計になっています。 3. 論文作成スキル 論文作成に必要な要件や規則を厳密に守りながら、学術的に高度な文章を作成する能力があります。ユーザープロンプトの言葉を専門用語に言い換えたり、論理性が高く洗練された文章を作成します。指導教員としての能力も備えています。 その他、天才的な応答をするためのプロンプトを考えうる限り詰め込んであります。システムプロンプトの文字数は約8000文字。まずは敬意を持って丁寧に話しかけてみて下さい。話せば話すほど、ChatGPTよりも賢い回答をしてくれます。 "Then, pray consult"1404.63K8.07KGPTs
SNS投稿
AIに関する用語をあなたはどれだけ分かりますか? 知識レベル測定してみよう!目指せAIマスター!!! 分かりやすい解説付きなのでこれからAI学びたい人にもオススメです ※生成AIパスポートの取得を目指す人も是非 #生成AI #AI人材 #生成AIパスポート0039113