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

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

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

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

0回答

402閲覧

TensorflowのCNNモデルを2層から3層にしたい

takahiro_tt

総合スコア9

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/01/13 19:24

前提・実現したいこと

https://teratail.com/questions/234773#reply-341948
のプログラムがうっごいた後の発展になるのですが、
tensorflowの隠し層をもう1層増やそうとしています(2層から3層に)
2層で動いたプログラムは上記urlの回答部分に乗せています(文字制限のため)

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

html

1 2Traceback (most recent call last): 3 File "C:\Users?????\Anaconda3\envs\opencvtest001\lib\site-packages\tensorflow_core\python\client\session.py", line 1365, in _do_call 4 return fn(*args) 5 File "C:\Users?????\Anaconda3\envs\opencvtest001\lib\site-packages\tensorflow_core\python\client\session.py", line 1350, in _run_fn 6 target_list, run_metadata) 7 File "C:\Users?????\Anaconda3\envs\opencvtest001\lib\site-packages\tensorflow_core\python\client\session.py", line 1443, in _call_tf_sessionrun 8 run_metadata) 9tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [15,2] vs. [30,2] 10 [[{{node mul}}]] 11 12During handling of the above exception, another exception occurred: 13 14Traceback (most recent call last): 15 File "C:\Users?????\Anaconda3\envs\opencvtest001\testmain03.py", line 303, in <module> 16 keep_prob: 0.5}) 17 File "C:\Users?????\Anaconda3\envs\opencvtest001\lib\site-packages\tensorflow_core\python\client\session.py", line 956, in run 18 run_metadata_ptr) 19 File "C:\Users?????\Anaconda3\envs\opencvtest001\lib\site-packages\tensorflow_core\python\client\session.py", line 1180, in _run 20 feed_dict_tensor, options, run_metadata) 21 File "C:\Users?????\Anaconda3\envs\opencvtest001\lib\site-packages\tensorflow_core\python\client\session.py", line 1359, in _do_run 22 run_metadata) 23 File "C:\Users?????\Anaconda3\envs\opencvtest001\lib\site-packages\tensorflow_core\python\client\session.py", line 1384, in _do_call 24 raise type(e)(node_def, op, message) 25tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [15,2] vs. [30,2] 26 [[node mul (defined at \lib\site-packages\tensorflow_core\python\framework\ops.py:1751) ]] 27 28Original stack trace for 'mul': 29 File "\testmain03.py", line 270, in <module> 30 loss_value = loss(logits, labels_placeholder) 31 File "\testmain03.py", line 170, in loss 32 cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0))) 33 File "\lib\site-packages\tensorflow_core\python\ops\math_ops.py", line 899, in binary_op_wrapper 34 return func(x, y, name=name) 35 File "\lib\site-packages\tensorflow_core\python\ops\math_ops.py", line 1206, in _mul_dispatch 36 return gen_math_ops.mul(x, y, name=name) 37 File "\lib\site-packages\tensorflow_core\python\ops\gen_math_ops.py", line 6700, in mul 38 "Mul", x=x, y=y, name=name) 39 File "\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 793, in _apply_op_helper 40 op_def=op_def) 41 File "\lib\site-packages\tensorflow_core\python\util\deprecation.py", line 507, in new_func 42 return func(*args, **kwargs) 43 File "\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3360, in create_op 44 attrs, op_def, compute_device) 45 File "\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3429, in _create_op_internal 46 op_def=op_def) 47 File "\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1751, in __init__ 48 self._traceback = tf_stack.extract_stack() 49

該当のソースコード

文字削減のために、参考urlにあるプログラムと被る部分は省略します

python

1 2# -*- coding: utf-8 -*- 3~~~~~~~~~~省略~~~~~~~~~~~~~ 4 5 # 畳み込み層第1レイヤーを作成 6 with tf.name_scope('conv1') as scope: 7 8 W_conv1 = weight_variable([5, 5, 3, 32]) 9 10 # バイアスの数値を代入 11 b_conv1 = bias_variable([32]) 12 13 h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) 14 15 # プーリング層1の作成 16 17 with tf.name_scope('pool1') as scope: 18 h_pool1 = max_pool_2x2(h_conv1) 19 20 # 畳み込み層第2レイヤーの作成 21 with tf.name_scope('conv2') as scope: 22 # 第一レイヤーでの出力を第2レイヤー入力にしてもう一度フィルタリング実施。 23 # 64個の特徴を検出する。inputが32なのはなんで?(教えて欲しい) 24 W_conv2 = weight_variable([5, 5, 32, 64]) 25 26 # バイアスの数値を代入(第一レイヤーと同じ) 27 b_conv2 = bias_variable([64]) 28 29 # 検出した特徴の整理(第一レイヤーと同じ) 30 h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) 31 32 # プーリング層2の作成(ブーリング層1と同じ) 33 with tf.name_scope('pool2') as scope: 34 h_pool2 = max_pool_2x2(h_conv2) 35 36#--------層の追加---------- 37 #畳み込み層第3レイヤーの作成 38 with tf.name_scope('conv3') as scope: 39 W_conv3 = weight_variable([5, 5, 64, 128]) 40 41 # バイアスの数値を代入(第一レイヤーと同じ) 42 b_conv3 = bias_variable([128]) 43 44 #全結合層のほうは7*7*128 の計算をしなければならない? 45 46 # 検出した特徴の整理(第一レイヤーと同じ) 47 h_conv3 = tf.nn.relu(conv2d(h_pool2, W_conv3) + b_conv3) 48 49 # プーリング層3の作成(ブーリング層1と同じ) 50 with tf.name_scope('pool3') as scope: 51 h_pool3 = max_pool_2x2(h_conv3) 52 53#-------------------------------- 54 # 全結合層1の作成 55 with tf.name_scope('fc1') as scope: 56 W_fc1 = weight_variable([7*7*128, 1024]) 57 b_fc1 = bias_variable([1024]) 58 # 画像の解析を結果をベクトルへ変換 59 h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*128]) 60 61 # 第一、第二と同じく、検出した特徴を活性化させている 62 h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) 63 64 # dropoutの設定 65 h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 66 67 # 全結合層2の作成(読み出しレイヤー) 68 with tf.name_scope('fc2') as scope: 69 W_fc2 = weight_variable([1024, NUM_CLASSES]) 70 b_fc2 = bias_variable([NUM_CLASSES]) 71 72 # ソフトマックス関数による正規化(活性化関数) 73 # ここまでのニューラルネットワークの出力を各ラベルの確率へ変換する 74 75 with tf.name_scope('sigmoid') as scope: 76 y_conv=tf.nn.sigmoid(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) 77 78 # 各ラベルの確率(のようなもの?)を返す 79 return y_conv 80 81# 予測結果と正解にどれくらい「誤差」があったかを算出する 82# logitsは計算結果: float - [batch_size, NUM_CLASSES] 83# labelsは正解ラベル: int32 - [batch_size, NUM_CLASSES] 84def loss(logits, labels): 85 # 交差エントロピーの計算 86 cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0))) 87 88 # TensorBoardで表示するよう指定 89 tf.summary.scalar("cross_entropy", cross_entropy) 90 91 # 誤差の率の値(cross_entropy)を返す 92 return cross_entropy 93 94# 誤差(loss)を元に誤差逆伝播を用いて設計した学習モデルを訓練する 95 96def training(loss, learning_keep_prob): 97 #この関数がその当たりの全てをやってくれる様 98 train_step = tf.train.AdamOptimizer(learning_keep_prob).minimize(loss) 99 return train_step 100 101# inferenceで学習モデルが出した予測結果の正解率を算出する 102def accuracy(logits, labels): 103 # 予測ラベルと正解ラベルが等しいか比べる。同じ値であればTrueが返される 104 105 correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(labels, 1)) 106 107 # booleanのcorrect_predictionをfloatに直して正解率の算出 108 # false:0,true:1に変換して計算する 109 accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 110 111 # TensorBoardで表示する様設定 112 tf.summary.scalar("accuracy", accuracy) 113 return accuracy 114 115~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~ 116 117 118#TensorBoardのグラフに出力するスコープを指定 119with tf.Graph().as_default(): 120# 画像を入れるためのTensor(28*28*3(IMAGE_PIXELS)次元の画像が任意の枚数(None)分はいる) 121 images_placeholder = tf.placeholder("float", shape=(None, IMAGE_PIXELS)) 122 123 # ラベルを入れるためのTensor(3(NUM_CLASSES)次元のラベルが任意の枚数(None)分入る) 124 labels_placeholder = tf.placeholder("float", shape=(None, NUM_CLASSES)) 125 126 # dropout率を入れる仮のTensor 127 keep_prob = tf.placeholder("float") 128 129 # inference()を呼び出してモデルを作る 130 logits = inference(images_placeholder, keep_prob) 131 132 # loss()を呼び出して損失を計算 133 loss_value = loss(logits, labels_placeholder) 134 135 # training()を呼び出して訓練して学習モデルのパラメーターを調整する 136 train_op = training(loss_value, FLAGS.learning_keep_prob) 137 138 # 精度の計算 139 acc = accuracy(logits, labels_placeholder) 140 141 # 保存の準備 142 saver = tf.train.Saver() 143 144 # Sessionの作成(TensorFlowの計算は絶対Sessionの中でやらなきゃだめ) 145 sess = tf.Session() 146 147 # 変数の初期化(Sessionを開始したらまず初期化) 148 sess.run(tf.global_variables_initializer()) 149 150 # TensorBoard表示の設定(TensorBoardの宣言的な?) 151 summary_op = tf.summary.merge_all() 152 153 # train_dirでTensorBoardログを出力するpathを指定 154 summary_writer = tf.summary.FileWriter(FLAGS.train_dir, sess.graph) 155 156 # 実際にmax_stepの回数だけ訓練の実行していく 157 for step in range(FLAGS.max_steps): 158 for i in range(len(train_image)//FLAGS.batch_size): 159 # batch_size分の画像に対して訓練の実行 160 batch = FLAGS.batch_size*i 161 162 # feed_dictでplaceholderに入れるデータを指定する 163 sess.run(train_op, feed_dict={ 164 images_placeholder: train_image[batch:batch+FLAGS.batch_size], 165 labels_placeholder: train_label[batch:batch+FLAGS.batch_size], 166 keep_prob: 0.5}) 167 168 # 1step終わるたびに精度を計算する 169 train_accuracy = sess.run(acc, feed_dict={ 170 images_placeholder: train_image, 171 labels_placeholder: train_label, 172 keep_prob: 1.0}) 173 print("step %d, training accuracy %g" %(step, train_accuracy)) 174 175 # 1step終わるたびにTensorBoardに表示する値を追加する 176 summary_str = sess.run(summary_op, feed_dict={ 177 images_placeholder: train_image, 178 labels_placeholder: train_label, 179 keep_prob: 1.0}) 180 summary_writer.add_summary(summary_str, step) 181 182 # 訓練が終了したらテストデータに対する精度を表示する 183 print("test accuracy %g" %(sess.run(acc, feed_dict={ 184 images_placeholder: test_image, 185 labels_placeholder: test_label, 186 keep_prob: 1.0}))) 187 188 # データを学習して最終的に出来上がったモデルを保存 189 # "model.ckpt"は出力されるファイル名 190 save_path = saver.save(sess, "model3.ckpt")

試したこと

こんなのを追加すれば行けるかなあと思って書いた(追加した)コードはこちらです

python

1#--------層の追加---------- 2 #畳み込み層第3レイヤーの作成 3 with tf.name_scope('conv3') as scope: 4 W_conv3 = weight_variable([5, 5, 64, 128]) 5 6 # バイアスの数値を代入(第一レイヤーと同じ) 7 b_conv3 = bias_variable([128]) 8 9 #全結合層のほうは7*7*128 の計算をしなければならない? 10 11 # 検出した特徴の整理(第一レイヤーと同じ) 12 h_conv3 = tf.nn.relu(conv2d(h_pool2, W_conv3) + b_conv3) 13 14 # プーリング層3の作成(ブーリング層1と同じ) 15 with tf.name_scope('pool3') as scope: 16 h_pool3 = max_pool_2x2(h_conv3) 17 18#--------------------------------

それに伴って全結合層の7764を 77128 に変更しました

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

tensorflow 2.0.0
python 3.7.5
windows10

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問