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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

967閲覧

ニューラルネットワークに内の内積計算エラーを解決したい

hidekun-

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/11/22 04:56

編集2019/11/23 07:51

前提・実現したいこと

ディープラーニングを用いて、道路の復旧期間日数の予測モデルを構築しています。
説明変数6種類(道路の崩壊程度、道路盛土の高さ、崩壊車線数など)、目的変数1種類(復旧までの日数)としてニュラールネットワークを構築しています。

そのなかで、以下の行列の内積計算エラーメッセージが発生しました。

発生している問題・エラーメッセージ

python

1ValueError Traceback (most recent call last) 2<ipython-input-42-64c8b1648510> in <module> 3 1 for i in range(epoch): 4----> 2 for j in range(0, x_train.shape[0], batch_size): w1, b1, w2, b2, w3, b3 = learn(x_train[j:j + batch_size], t_train[j:j + batch_size], w1, b1, w2, b2, w3, b3, lr) 5 3 # 学習 shape[00]は行の大きさを調べている.ここでは, ,77.よって 0~77の範囲でバッチサイズ文のステップ幅で数列を作成 6 7<ipython-input-33-1c9a75ec0d92> in learn(x, t, w1, b1, w2, b2, w3, b3, lr) 8 10 # 逆伝播 (勾配の計算を求め、重みの更新を行う部分 ) 9 11 dy = identity_mean_squared_error_back(y, t) 10---> 12 dz2, dw3, db3 = affine_back(dy, z2, w3, b3) 11 13 du2 = sigmoid_back(u2) 12 14 dz1, dw2, db2 = affine_back(du2, z1, w2, b2) 13 14<ipython-input-30-e9009ace5ac4> in affine_back(du, z, w, b) 15 9 # affine変換勾配 16 10 def affine_back(du, z, w, b): 17---> 11 dz = np.dot(du, w.T) 18 12 dw = np.dot(z.T, du) 19 13 db = np.dot(np.ones(z.shape[0]).T, du) 20 21ValueError: shapes (32,2) and (1,30) not aligned: 2 (dim 1) != 1 (dim 0) 22

該当のソースコード

python

1import numpy as np 2import pandas as pd 3from sklearn.model_selection import train_test_split 4import matplotlib.pyplot as plt 5import matplotlib.pyplot as plt 6 7# affine変換してる 8def affine(z, w, b): 9return np.dot(z, w) + b 10 11# affine変換勾配 12def affine_back(du, z, w, b): 13dz = np.dot(du, w.T) 14dw = np.dot(z.T, du) 15db = np.dot(np.ones(z.shape[0]).T, du) 16return dz, dw, db 17def sigmoid(u): 18return 1 / (1 + np.exp( u)) 19 20#活性化関数 シグモイド の 勾配,中間層の勾配 21def sigmoid_back(u): 22return (1 sigmoid(u)) * sigmoid(u) 23def identity(u): 24return u 25 26 27#二乗和誤差:回帰問題 28def squared_error(y, t): 29return 0.5 * np.sum((y t) ** 2) / y.shape[0] 30 31 32#誤差 二乗和誤差)+活性化関数 恒等関数 の勾配 33def identity_mean_s 34quared_error_back(y, t): 35return (y t) / y.shape[0] 36 37#学習部分 38def learn(x, t, w1, b1, w2, b2, w3, b3, lr): 39#順伝播 入力データから、予測データを求めるまで 40u1 = affine(x, w1, b1) 41z1 = sigmoid(u1) 42u2 = affine(z1, w2, b2) 43z2 = sigmoid(u2) 44u3 = affine(z2, w3, b3) 45y = identity(u3) 46 47#逆伝播 勾配の計算を求め、重みの更新を行う部分 48dy = identity_mean_squared_error_back(y, t) 49dz2, dw3, db3 = affine_back(dy, z2, w3, b3) 50du2 = sigmoid_back(u2) 51dz1, dw2, db2 = affine_back(du2, z1, w2, b2) 52du 1 = sigmoid_back(u1) 53dx, dw1, db1 = affine_back(du1, x, w1, b1) 54 55#重み、バイアスの更新 56w1 = w1 lr * dw1 57b1 = b1 lr * db1 58w2 = w2 lr * dw2 59b2 = b2 lr * db2 60w3 = w3 lr * dw3 61b3 = b3 lr * db3 62return w1, b1, w2, b2, w3, b3 63 64def predict(x, w1, b1, w2, b2, w3, b3): 65#順伝播 66u1 = affine(x, w1, b1) 67z1 = sigmoid(u1) 68u2 = affine(z1, w2, b2) 69z2 = sigmoid(u2) 70u3 = affine(z2, w3, b3) 71y = identity(u3) 72return y 73 74#実行プログラム 75#地震データ読み込み 76df = pd.read_csv('earthquake_B_traffic.csv') 77 78# データの作成データの作成 説明変数・目的変数分ける説明変数・目的変数分ける 79df_x = df.drop("regulatory period", axis=1) 80p= df.drop("damage range", axis=1) 81q= p.drop( "embankment height", axis=1) 82r= q.drop("landform", axis=1) 83s= r.drop("banking structure", axis=1) 84t= s.drop("damage form", axis=1) 85u= t.drop("traffic", axis=1) 86 87# 説明変数・目的変数をそれぞれ訓練データ・テストデータに分割説明変数・目的変数をそれぞれ訓練データ・テストデータに分割 88x_train, x_test, t_train, t_test = train_test_split(df_x, t, test_size=0.3) 89 90#ノード数設定 91d0 = x_train.shape[1] 92d1 = 30 # 1層目のノード 数 93d2 = 30 # 2層目のノード数 94d3 = 1 #出力層 95 96#重みの初期化 0.1 0.1 の乱数 97np.random.seed(8) 98w1 = np.random.rand(d0, d1)*0.001 99w2 = np.random.rand(d1, d2)*0.001 100w3 = np.random.rand(d2, d3)*0.001 101#重みを1 ~0.001 に設定する部分 102 103 104#バイアスの初期化 ( 105b1 = np.zeros(d1) 106b2 = np.zeros(d2) 107b3 = np.z 108eros(d3) 109 110#学習率 111lr = 0.5 112 113#バッチサイズ 114batch_size = 32 115 116#学習回数 117epoch =1000 118 119#グラフを 描写リスト 120x = [0, epoch] 121y = [0.100] 122 123for i in range(epoch): 124for j in range(0, x_train.shape[0], batch_size): w1, b1, w2, b2, w3, b3 = learn(x_train[j:j + batch_size], t_train[j:j + batch_size], w1, b1, w2, b2, w3, b3, 125# 学習 shape[ 00 は行の大きさを調べている.ここでは, 77 .よって 0~77 の範囲でバッチサイズ文のステップ幅で数列を作成 126

試したこと

説明変数の数を6種類から5種類に減らした結果、エラーの発生はなくプログラムが動きました。
ディープラーニングを用いた文字認識のモデルのこーどを参考にしています。

補足情報(FW/ツールのバージョンなど)

(32,2)
→32:バッチサイズ
→2: ?

(1,30)
→1:出力層のサイズ
→30:2層目のノード数

ということはわかっています。

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

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

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

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

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

guest

回答1

0

自己解決

python

1# データの作成データの作成 説明変数・目的変数分ける説明変数・目的変数分ける 2df_x = df.drop("regulatory period", axis=1) 3p= df.drop("damage range", axis=1) 4q= p.drop( "embankment height", axis=1) 5r= q.drop("landform", axis=1) 6s= r.drop("banking structure", axis=1) 7t= s.drop("damage form", axis=1) 8u= t.drop("traffic", axis=1) 9 10# 説明変数・目的変数をそれぞれ訓練データ・テストデータに分割説明変数・目的変数をそれぞれ訓練データ・テストデータに分割 11x_train, x_test, t_train, t_test = train_test_split(df_x, t, test_size=0.3) 12

の部分の最終行「(df_x, t, test_size=0.3)」の ”t” を ”u” に変更すると解決した。

もともと5種類の説明変数でモデルを構築していたプログラムで、それを6種類に増やした際に説明変数の最後の"traffic”の行を考慮せずにプログラムを走らせていたところエラーが発生していた。

投稿2019/11/23 09:06

hidekun-

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問