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

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

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

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

Q&A

解決済

1回答

227閲覧

ニューラルネットの隠れ層へのデータの入力がわかりません(python)

yamahituzi

総合スコア7

Python

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

0グッド

0クリップ

投稿2018/02/03 11:35

前提・実現したいこと

pythonでニューラルネットワークの学習をしています
エラーそのものの意味は分かるのですが、

ニューラルネットの参考プログラム等の
h = F.sigmoid(self.l1(x))
h = F.sigmoid(self.l2(h))
a = F.sigmoid(self.l3(h))
というような書き方で上手く動く理由や、与えるべき入力、改善方法等が知りたいです

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

Exception in main training loop:
Invalid operation is performed in: LinearFunction (Forward)

Expect: in_types[0].shape[1] == in_types[1].shape[1]
Actual: 800 != 200

該当のソースコード

python

1~~~ 2class test(chainer.Chain): 3 def __init__(self, n_vocab, n_units, loss_func,n_unit_test1, n_unit_test2): 4 super(test, self).__init__() 5 with self.init_scope(): 6 print(n_vocab)#32945 7 print(n_units)#200 8 print(n_unit_test2)#50 9 print(n_unit_test1)#200 10 self.embed = L.EmbedID( 11 n_vocab, n_units, initialW=I.Uniform(1. / n_units)) 12 self.layer1=L.Linear(n_units,n_unit_test2) 13 self.layer2=L.Linear(n_unit_test2,n_unit_test1) 14 self.loss_func = loss_func 15 16 def __call__(self, x, context):#batchsize=100 17 print(context.shape)#(100, 4) 18 e = self.embed(context) 19 print(e.shape)#(100, 4, 200) 20 ef=F.sigmoid(e) 21 print(ef.shape)#(100, 4, 200) 22 #ここでエラー 23 h1=self.layer1(ef) 24 #ここでエラー 25 print(h1.shape) 26 """ 27 for (ei,ew) in enumerate(e): 28 if ei==0: 29 print(ew.shape) 30 h1=[np.array(self.layer1(ew))] 31 else: 32 h1=np.append(h1,[np.array(self.layer1(ew))],axis=0) 33 """

試したこと

コメントアウトしているプログラムのように(100,4,200)のリストを(4,200)に分割し、入力を行えば"h1"そのものは改善できました。が、さらにニューラルネットに入れる際にエラーが発生してしまうこと、そもそも動かない理由などがわかりません

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

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

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

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

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

mkgrei

2018/02/04 06:49

chainerタグがないと回答を得るのは難しいと思います。バージョンでAPIが異なりますので、そちらも必要です。
guest

回答1

0

ベストアンサー

Invalid operation is performed in: LinearFunction (Forward)

のエラーが示すように、(-1,200)の形を期待しています。

渡したものが(100,4,200)なのでこれを(100,800)と解釈してエラーになっていると想像します。

なにを行うコードなのかわからないのに加えて、実行に必要なコードとデータがないので修正することはできません。

投稿2018/02/04 06:52

mkgrei

総合スコア8560

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

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

yamahituzi

2018/02/04 09:51

回答ありがとうございます。 元々300行以上あるプログラムなので必要な場所だけ投稿したつもりでしたが、不勉強でした 改めて勉強すること、タグなどの修正を加えて登校しなおしたいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問