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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

334閲覧

画像識別、ニューラルネットワーク

akihir

総合スコア39

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/29 17:18

現在、単純なニューラルネットワークを用いてある画像データをmnistのように識別するモデルを作成しています。

以前は、6割、7割の精度を出していたのですが、いろいろと試行錯誤しているうちに、精度がとても悪くなり、条件を変えても精度が変わらなくなりました。

プログラムフローやミスなどを探しているのですが、どこが悪いのかわかりません。

アドバイスをくれないでしょうか。
モデル(重み、バイアス)が初期化されていない気がするのですが、初期化するようなコードは組んでいます。。。

python

1 2def accuracy(batch_size,batch_times,epochs,learn): 3 4 5 # 784次元ベクトルに平坦化された任意の数の画像を入力する 6 # これを浮動小数点数の2次元テンソルとして表現する 7 x = tf.placeholder(tf.float32,[None,784]) 8 9 10 # Wとbの両方を全て0のテンソルとして初期化する 11 W = tf.Variable(tf.zeros([784, 15])) 12 b = tf.Variable(tf.zeros([15])) 13 14 # xをWにtf.matmul(x、W)で内積。tf.nn.softmaxを適用。 15 y = tf.nn.softmax(tf.matmul(x, W) + b) 16 17 # 答えを入力するための新しいplacehplder 18 y_ = tf.placeholder(tf.float32, [None, 15]) 19 20 # クロスエントロピー関数の実装 21 # reduce_mean: 平均  reduce_sum : 総和 22 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 23 24 # train_stepを呼び出したら学習率learnでcross_entropyを最小にするような勾配降下法を用いる 25 train_step = tf.train.GradientDescentOptimizer(learn).minimize(cross_entropy) 26 27 # --------------------------------データ初期化---------------------------------------------------- 28 sess = tf.InteractiveSession() 29 30 tf.global_variables_initializer().run() 31 32 # ----------------------------------------学習-------------------------------------------- 33 34 35 for u in range(0,epochs):# ←バッチサイズ100で100回繰り返す(バッチ回数=100).それを100回繰り返す(epoch=100) 36 for i in range(batch_times):# ←もしここで1000回繰り返すなら、バッチ回数が1000ということ 37 38 normal_array=[] 39 for t in range(0,2400): 40 normal_array.append(i) 41 42 random_number = random.sample(normal_array,batch_size) 43 44 batch_xs = np.asarray([train_ones[random_number[i],:] for i in range(0,len(random_number))]) 45 batch_ys = np.asarray([trainL[random_number[i],:] for i in range(0,len(random_number))]) 46 47 # feed_dictで先ほど作成したプレイスホルダーにbatch_xsなどのデータを入れる 48 # プレイスホルダーの値を用いてtrain_stepを実行する 49 # ↑この2つの操作を自動的にする実行環境のことをセッションという 50 51 sess.run(train_step, feed_dict={x:batch_xs, y_:batch_ys}) 52 # train_stepは学習の手段であり、このセッションのおかげで学習することができる 53 54 55 # ------------------------------------精度計算--------------------------------------------- 56 57 # NumPyのargmax関数は、多次元配列の中の最大値の要素を持つインデックスを返す関数です。 58 # y,y_は(784,15)。なので、argmax(y,1)は784この中でもっとも大きな要素を持つインデック 59 # スを15個出力している。それのなかでどのラベルと等しいかどうか→数字を予測 60 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) 61 # correct_predictionは[true or false] 62 63 # cast(変換したいもの,変換後の型) 64 # 以下の場合だと、true,false→float型の少数に直す 65 accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 66 # 1が多ければ精度が1に近づく 67 68 print(sess.run(accuracy, feed_dict={x:test_ones, y_ : testL})) 69

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

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

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

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

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

coco_bauer

2018/11/30 01:39

試行錯誤をしてきた時の記録(プログラム、使用したデータ、条件、得られた精度等)が残っているのなら、精度が悪くなる前後を比較すると良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問