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

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

ただいまの
回答率

89.05%

python:kerasで画像のCNN学習器作成でエラーが出ます。。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 346

python_2019

score 66

以下のようなCNN学習器作成でエラーが出ます。原因が良く分かりません。
どなかた詳しい方、ご指導をお願いいたします。

optimizers ="Adadelta"
results = {}
epochs = 200
model.compile(loss='categorical_crossentropy', optimizer=optimizers, metrics=['accuracy'])
#x_train, y_train, batch_size=batch_size, epochs=epochs,erbose=1, validation_data=(x_test, y_test)
results= model.fit(X_train, y_train, validation_split=0.2, epochs=epochs )

model_json_str = model.to_json()
open('dokugyo_mlp_weights.json', 'w').write(model_json_str)
model.save_weights('dokugyo_mlp_weights.h5');

以下、エラーメッセージ

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-71d4f9fdc3b9> in <module>
      4 model.compile(loss='categorical_crossentropy', optimizer=optimizers, metrics=['accuracy'])
      5 #x_train, y_train, batch_size=batch_size, epochs=epochs,erbose=1, validation_data=(x_test, y_test)
----> 6 results= model.fit(X_train, y_train, validation_split=0.2, epochs=epochs )
      7 
      8 model_json_str = model.to_json()

~\Anaconda3\lib\site-packages\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, **kwargs)
    950             sample_weight=sample_weight,
    951             class_weight=class_weight,
--> 952             batch_size=batch_size)
    953         # Prepare validation data.
    954         do_validation = False

~\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
    807                 # using improper loss fns.
    808                 check_loss_and_target_compatibility(
--> 809                     y, self._feed_loss_fns, feed_output_shapes)
    810         else:
    811             y = []

~\Anaconda3\lib\site-packages\keras\engine\training_utils.py in check_loss_and_target_compatibility(targets, loss_fns, output_shapes)
    271                 raise ValueError(
    272                     'You are passing a target array of shape ' + str(y.shape) +
--> 273                     ' while using as loss `categorical_crossentropy`. '
    274                     '`categorical_crossentropy` expects '
    275                     'targets to be binary matrices (1s and 0s) '

ValueError: You are passing a target array of shape (50, 1) while using as loss `categorical_crossentropy`. `categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes). If your targets are integer classes, you can convert them to the expected format via:
``
from keras.utils import to_categorical
y_binary = to_categorical(y_int)
``

Alternatively, you can use the loss function `sparse_categorical_crossentropy` instead, which does expect integer targets.
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • tkymtmt

    2019/12/06 08:51

    エラーメッセージにあるように、model.compileにおいてloss='categorical_crossentropy'ではなくloss='sparse_categorical_crossentropy'におきかえて試してみましたか?

    キャンセル

  • python_2019

    2019/12/06 22:28

    ご連絡ありはとうございます。
    ご指摘通り実行すると、以下のようなエラーが出ました。
    なぜでしょうか?

    ---------------------------------------------------------------------------
    InvalidArgumentError Traceback (most recent call last)
    <ipython-input-4-c14da5f590a7> in <module>
    10 model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizers, metrics=['accuracy'])
    11 #x_train, y_train, batch_size=batch_size, epochs=epochs,erbose=1, validation_data=(x_test, y_test)
    ---> 12 results= model.fit(X_train, y_train, validation_split=0.2, epochs=epochs )
    13
    14 model_json_str = model.to_json()

    ~\Anaconda3\lib\site-packages\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, **kwargs)
    1037 initial_epoch=initial_epoch,
    1038 steps_per_epoch=steps_per_epoch,
    -> 1039 validation_steps=validation_steps)
    1040
    1041 def evaluate(self, x=None, y=None,

    ~\Anaconda3\lib\site-packages\keras\engine\training_arrays.py in fit_loop(model, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)
    197 ins_batch[i] = ins_batch[i].toarray()
    198
    --> 199 outs = f(ins_batch)
    200 outs = to_list(outs)
    201 for l, o in zip(out_labels, outs):

    ~\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py in __call__(self, inputs)
    2713 return self._legacy_call(inputs)
    2714
    -> 2715 return self._call(inputs)
    2716 else:
    2717 if py_any(is_tensor(x) for x in inputs):

    ~\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py in _call(self, inputs)
    2673 fetched = self._callable_fn(*array_vals, run_metadata=self.run_metadata)
    2674 else:
    -> 2675 fetched = self._callable_fn(*array_vals)
    2676 return fetched[:len(self.outputs)]
    2677

    ~\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in __call__(self, *args, **kwargs)
    1456 ret = tf_session.TF_SessionRunCallable(self._session._session,
    1457 self._handle, args,
    -> 1458 run_metadata_ptr)
    1459 if run_metadata:
    1460 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

    InvalidArgumentError: Received a label value of 1 which is outside the valid range of [0, 1). Label values: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    [[{{node loss/activation_6_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]]

    キャンセル

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

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

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

関連した質問

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