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

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

ただいまの
回答率

89.07%

one_hot表現でのエラー

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 214

kwkwkwk

score 6

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

cnnを用いて画像分類を行っています。
エラーの意味分かるのですがどのコードが間違っているか分かりません。おそらくOne-hot表現の部分が間違っているのではないかと思っているのですが、、プログラミング初心者でよくわかりません。よろしくお願いします。

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-86-1097be2f782e> in <module>()
      5                  validation_data=(X_test, Y_test),
      6                  verbose=1,
----> 7                  batch_size=10)

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    726         max_queue_size=max_queue_size,
    727         workers=workers,
--> 728         use_multiprocessing=use_multiprocessing)
    729 
    730   def evaluate(self,

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
    222           validation_data=validation_data,
    223           validation_steps=validation_steps,
--> 224           distribution_strategy=strategy)
    225 
    226       total_samples = _get_total_number_of_samples(training_data_adapter)

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in _process_training_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, steps_per_epoch, validation_split, validation_data, validation_steps, shuffle, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    545         max_queue_size=max_queue_size,
    546         workers=workers,
--> 547         use_multiprocessing=use_multiprocessing)
    548     val_adapter = None
    549     if validation_data:

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in _process_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, shuffle, steps, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    592         batch_size=batch_size,
    593         check_steps=False,
--> 594         steps=steps)
    595   adapter = adapter_cls(
    596       x,

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, steps, validation_split, shuffle, extract_tensors_from_dataset)
   2532       # Check that all arrays have the same length.
   2533       if not self._distribution_strategy:
-> 2534         training_utils.check_array_lengths(x, y, sample_weights)
   2535         if self._is_graph_network and not self.run_eagerly:
   2536           # Additional checks to avoid users mistakenly using improper loss fns.

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py in check_array_lengths(inputs, targets, weights)
    675                      'the same number of samples as target arrays. '
    676                      'Found ' + str(list(set_x)[0]) + ' input samples '
--> 677                      'and ' + str(list(set_y)[0]) + ' target samples.')
    678   if len(set_w) > 1:
    679     raise ValueError('All sample_weight arrays should have '

ValueError: Input arrays should have the same number of samples as target arrays. Found 900 input samples and 9000 target samples.

該当のソースコード

#CIFAR10からダウンロードして画像処理と水増し
#X_train.shape: (900, 32, 32, 3)
#X_test.shape:  (50, 32, 32, 3)
#y_train.shape:  (900, 1)
#y_test.shape:  (50, 1)
#Kerasが処理できる数値型に X_train と X_test を変換
X_train = X_train.transpose([0, 3, 1, 2])
X_test = X_test.transpose([0, 3, 1, 2])
X_train = X_train.astype('f')
X_test = X_test.astype('f')Python3
#正規化
X_train /= X_train.max() 
X_test /= X_test.max()
#one-hot表現
from keras.utils import np_utils
Y_train = np_utils.to_categorical(y_train, num_classes=10).astype('i')
Y_test = np_utils.to_categorical(y_test, num_classes=10).astype('i')
print("Y_train.shape: ",Y_train.shape)
print("Y_test.shape: ",Y_test.shape)

#CNNモデルの定義
model = Sequential()
model.add(Conv2D(kernel_size=(3, 3),filters=32,activation='relu',input_shape=input_shape))
model.add(Conv2D( kernel_size=(3, 3),filters=64,activation='relu',))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Dense(units=128, activation='relu'))
model.add(Dropout(0.50))
model.add(Dense(units=num_classes, activation='softmax'))
model.summary()

model.compile(loss='categorical_crossentropy',
              metrics=['accuracy'])
#実行
hist = model.fit(X_train,
                 Y_train,
                 epochs=100,
                 validation_data=(X_test, Y_test),
                 verbose=1,
                 batch_size=10)

 

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

jupyter notebook

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • kwkwkwk

    2020/04/18 10:18

    np_utils.to_categorical(y_train, num_classes=10).astype('i')
    は他ページのonehot表現の部分ををコピペしました。

    キャンセル

  • kwkwkwk

    2020/04/18 10:19

    追加します。ありがとうございます。

    キャンセル

  • kwkwkwk

    2020/04/18 11:51

    X_train = X_train.transpose([0, 3, 1, 2])
    X_test = X_test.transpose([0, 3, 1, 2])
    この部分が間違っていたので直したら、エラー改善されました。
    しかし以下のようなエラーが出ました。
    ---------------------------------------------------------------------------
    ValueError Traceback (most recent call last)
    <ipython-input-16-1097be2f782e> in <module>()
    5 validation_data=(X_test, Y_test),
    6 verbose=1,
    ----> 7 batch_size=10)

    ~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    726 max_queue_size=max_queue_size,
    727 workers=workers,
    --> 728 use_multiprocessing=use_multiprocessing)
    729
    730 def evaluate(self,

    ~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
    222 validation_data=validation_data,
    223 validation_steps=validation_steps,
    --> 224 distribution_strategy=strategy)
    225
    226 total_samples = _get_total_number_of_samples(training_data_adapter)

    ~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in _process_training_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, steps_per_epoch, validation_split, validation_data, validation_steps, shuffle, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    545 max_queue_size=max_queue_size,
    546 workers=workers,
    --> 547 use_multiprocessing=use_multiprocessing)
    548 val_adapter = None
    549 if validation_data:

    ~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in _process_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, shuffle, steps, distribution_strategy, max_queue_size, workers, use_multiprocessing)
    592 batch_size=batch_size,
    593 check_steps=False,
    --> 594 steps=steps)
    595 adapter = adapter_cls(
    596 x,

    ~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, steps, validation_split, shuffle, extract_tensors_from_dataset)
    2536 # Additional checks to avoid users mistakenly using improper loss fns.
    2537 training_utils.check_loss_and_target_compatibility(
    -> 2538 y, self._feed_loss_fns, feed_output_shapes)
    2539
    2540 # If sample weight mode has not been set and weights are None for all the

    ~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py in check_loss_and_target_compatibility(targets, loss_fns, output_shapes)
    741 raise ValueError('A target array with shape ' + str(y.shape) +
    742 ' was passed for an output of shape ' + str(shape) +
    --> 743 ' while using as loss `' + loss_name + '`. '
    744 'This loss expects targets to have the same shape '
    745 'as the output.')

    ValueError: A target array with shape (900, 10) was passed for an output of shape (None, 14, 14, 10) while using as loss `categorical_crossentropy`. This loss expects targets to have the same shape as the output.

    キャンセル

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

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

  • ただいまの回答率 89.07%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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