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

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

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

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

解決済

TensorFlowのエラーメッセージの意味

Sunshine96
Sunshine96

総合スコア11

Python

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

2回答

1評価

2クリップ

15083閲覧

投稿2017/09/20 10:04

編集2017/09/21 11:44

今、cifar-10のデータをCNNを用いて学習させようとしているのですが、
この畳み込み層を構成して学習を実行sルトTensorFlowの中でエラーが発生しました。
意味のわかる方、回答お願いします。

python

# 前データ処理関連 import pickle import numpy as np # データセットのダウンロード dtype = 'float16' def unpickle(file): import pickle with open(file, 'rb') as fo: dict = pickle.load(fo, encoding='bytes') return dict batch_name = { 1: "data_batch_1", 2:"data_batch_2", 3: "data_batch_3", 4: "data_batch_4", 5: "data_batch_5"} A = [] for (a,b) in batch_name.items(): tmp = unpickle("cifar-10-batches-py/{}".format(b)) A.append(tmp) tmp = unpickle("cifar-10-batches-py/test_batch") X_test, Y_test = np.array(tmp[b'data'], dtype=dtype), np.array(tmp[b'labels'], dtype=dtype) Y = np.array([]) X = np.array([[]]) for i in range(5): if i == 0: X = np.array(A[i][b'data'], dtype=dtype) Y = np.array(A[i][b'labels'], dtype=dtype) else: X = np.append(X, np.array(A[i][b'data'], dtype=dtype), axis=0) Y = np.append(Y, np.array(A[i][b'labels'], dtype=dtype)) # データセットの整理 X_image = X.reshape(-1, 3, 1024).copy() X_max = np.amax(X_image, axis=2, keepdims=True) X_min = np.amin(X_image, axis=2, keepdims=True) X_mean = X_image.mean(axis=2, dtype=dtype, keepdims=True) X_image_st = (X_image - X_mean)/(X_max-X_min) # testデータの方も同様の操作を行う X_test_image = X_test.reshape(-1, 3, 1024).copy() X_test_max = np.amax(X_test_image, axis=2, keepdims=True) X_test_min = np.amin(X_test_image, axis=2, keepdims=True) X_test_mean = X_test_image.mean(axis=2, dtype=dtype, keepdims=True) X_test_image_st = (X_test_image - X_test_mean)/(X_test_max-X_test_min) # RGBの順番にデータが並ぶように結合を直す(ここは勘違い # の可能性があります) X_image_st2 = X_image_st.reshape(-1, 3, 1024,1) X_train = np.concatenate((X_image_st2[:,0], X_image_st2[:,1], X_image_st2[:, 2]), axis=2) X_test_image_st2 = X_test_image_st.reshape(-1,3, 1024,1) X_test = np.concatenate((X_test_image_st2[:,0], X_test_image_st2[:,1], X_test_image_st2[:, 2]), axis=2) X_train = X_train.reshape(-1, 1024, 3) X_test = X_test.reshape(-1, 1024, 3) # ラベルデータの前準備(0~9の値からそのインデックスが1になる # ような2次元配列を生成する Y_test2 = np.zeros((10000, 10)) Y_train = np.zeros((50000, 10)) for i in range(10000): Y_test2[i, int(Y_test[i])] = 1 for i in range(50000): Y_train[i, int(Y[i])] = 1 import tensorflow as tf x = tf.placeholder(tf.half, shape=[None, 1024, 3]) x_image = tf.reshape(x, [-1, 32, 32, 3]) # バッチ数、縦、横、チャンネル数 y_ = tf.placeholder(tf.half, shape=[None, 10]) # 1段目の畳み込み層フィルター num_filters1 = 32 W_conv1 = tf.Variable(tf.truncated_normal([3, 3, 3, num_filters1], stddev=0.1, dtype=tf.half)) h_conv1 = tf.nn.conv2d(x_image, W_conv1, strides=[1,1,1,1], padding='SAME') b_conv1 = tf.Variable(tf.constant(0.1, shape=[num_filters1], dtype=tf.half)) h_conv1_cutoff = tf.nn.relu(h_conv1 + b_conv1) h_pool1 = tf.nn.max_pool(h_conv1_cutoff, ksize=[1, 2,2,1], strides=[1, 2, 2, 1], padding='SAME') # 2段目の畳み込み層フィルター num_filters2 = 64 W_conv2 = tf.Variable(tf.truncated_normal([3, 3, num_filters1, num_filters2], dtype=tf.half)) h_conv2 = tf.nn.conv2d(h_pool1, W_conv2, strides=[1, 1, 1, 1], padding='SAME') b_conv2 = tf.Variable(tf.constant(0.1, shape=[num_filters2], dtype=tf.half)) h_conv2_cutoff = tf.nn.relu(h_conv2 + b_conv2) h_pool2 = tf.nn.max_pool(h_conv2_cutoff, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') # 3段目の畳み込み層フィルター num_filters3 = 128 W_conv3 = tf.Variable(tf.truncated_normal([5, 5, num_filters2, num_filters3], dtype=tf.half)) h_conv3 = tf.nn.conv2d(h_pool2, W_conv3, strides= [1, 1, 1, 1], padding='SAME') b_conv3 = tf.Variable(tf.constant(0.1, shape=[num_filters3], dtype=tf.half)) h_conv3_cutoff = tf.nn.relu(h_conv3 + b_conv3) h_pool3 = tf.nn.max_pool(h_conv2_cutoff, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding = 'SAME') # 全結合層、ドロップアウト層、ソフトマックス関数 h_pool3_flat = tf.reshape(h_pool3, [-1, 8*8*num_filters3]) num_units1 = 8*8*num_filters3 num_units2 = 1024 w2 = tf.Variable(tf.truncated_normal([num_units1, num_units2], dtype=tf.half)) b2 = tf.Variable(tf.constant(0.1, shape=[num_units2], dtype=tf.half)) hidden2 = tf.nn.relu(tf.matmul(h_pool3_flat, w2) + b2) keep_prob = tf.placeholder(tf.half) hidden2_drop = tf.nn.dropout(hidden2, keep_prob) w0 = tf.Variable(tf.zeros([num_units2, 10], dtype=tf.half)) b0 = tf.Variable(tf.zeros([10], dtype=tf.half)) p = tf.nn.softmax(tf.matmul(hidden2_drop, w0) + b0) # 誤差関数 t = tf.placeholder(tf.half, [None, 10]) loss = -tf.reduce_sum(t * tf.log(p)) train_step = tf.train.AdamOptimizer(0.0001).minimize(loss) correct_prediction = tf.equal(tf.argmax(p, 1), tf.argmax(t, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.half)) sess = tf.Session() sess.run(tf.global_variables_initializer()) # トレーニングの実行 i = 0 for _ in range(4000): i += 1 ra = np.random.randint(50000, size=(50)) batch_xs, batch_ts = X_train[ra], Y_train[ra] sess.run(train_step, feed_dict = {x: batch_xs, t:batch_ts, keep_prob:0.5}) if i % 500 == 0: loss_vals, acc_vals = [], [] for c in range(4): start = len(Y_test)/4*c end = len(Y_test)/4*(c+1) loss_val, acc_val = sess.run([loss, accuracy], feed_dict={x: X_test[start:end], t: Y_test[start:end], keep_prob:1.0}) loss_vals.append(loss_val) acc_vals.append(acc_val) loss_val = np.sum(loss_vals) acc_val = np.mean(acc_vals) print('Step: %d, Loss: %f, Accuracy: %f' % (i, loss_val, acc_val))

この最後のトレーニングの実行をすると、以下のエラーが返されました。

python

InvalidArgumentError: Incompatible shapes: [50,10] vs. [25,10] [[Node: mul_1 = Mul[T=DT_HALF, _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_Placeholder_8_0_2, Log_1)]] InvalidArgumentError: Incompatible shapes: [50,10] vs. [25,10] [[Node: mul_1 = Mul[T=DT_HALF, _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_Placeholder_8_0_2, Log_1)]]

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

退会済みユーザー
退会済みユーザー

2017/09/20 11:44 編集

行列の形(テンソル)が違うということだと思いますが、具体的に何行目のどこでエラー、というような通知はありませんか?
Sunshine96
Sunshine96

2017/09/20 13:24

指摘ありがとうございます。確認して見たところ、エラーが出たのはこの部分のようです。これ以上遡った部分はよくわからない感じになってしまいました。
退会済みユーザー
退会済みユーザー

2017/09/21 10:08

私の勉強のためにもこのコードを手元で試したいのですが、このほかにコードはありますか?もし元になったURLがあったら教えてほしいです。
Sunshine96
Sunshine96

2017/09/21 11:39

元になっているコードは [TensorFlowで学ぶディープラーニング入門〜畳み込みニューラルネットワーク徹底解説〜」という本です!ここのMNISTをCNNで分析しているコードがあるのですがそれを元にいじってあります。ソースコード、全部記載しておきますね。
退会済みユーザー
退会済みユーザー

2017/09/22 10:13

ありがとうございます。まだ確認中ですが、エラーは複数あるようです。片方はこのコードのどこで起きているのかの行数表示すらなく止まっているのでよく分かりません。その下にDuring handling of the above exception, another exception occurred:と表示され、loss = -tf.reduce_sum(t * tf.log(p))がエラーの根源だと表示されています。いずれにせよ行列の形が合っていないせいで計算が進めないために止まっているようです。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

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