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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

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

Q&A

解決済

1回答

1272閲覧

CNNで画像を3つのクラスに分類するモデルを作成したい

shishi_maru440

総合スコア38

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

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

0グッド

0クリップ

投稿2021/04/21 21:56

前提・実現したいこと

CNNで3つのクラスに分類するモデルを作成したいが、モデルをfitさせる際にエラーが
発生し計算することができない。

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

InvalidArgumentError: Received a label value of 3 which is outside the valid range of [0, 3). Label values: 3 3 3 1 3 3 3 1 3 1 3 1 3 3 1 1 2 3 3 3 3 3 3 2 2 2 3 1 3 3 3 2 [[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (defined at <ipython-input-27-ef4f701c1d6f>:1) ]] [Op:__inference_train_function_2140] Function call stack: train_function

該当のソースコード

python

1import tensorflow 2from tensorflow import keras 3import matplotlib.pyplot as plt 4%matplotlib inline 5import pandas as pd 6import numpy as np 7import glob 8import cv2 9from PIL import Image 10 11df2 = pd.read_csv("data2.csv") 12files = glob.glob("/Users/a440/Desktop/happy_images/*") 13df_files = pd.DataFrame({"data":files}) 14 15df2["data"] = "/Users/a440/Desktop/happy_images/" + df2["data"] + ".jpg" 16df2 = df2.drop("Unnamed: 0", axis=1) 17df2.to_csv("data2-2.csv") 18df_join = pd.merge(df2, df_files, how="inner",on="data",indicator=True) 19 20#targetにsmileのカテゴリを代入 21smiles =df_join["smile"] 22target = [] 23 24for smile in smiles: 25 data = np.asarray(smile) 26 target.append(data) 27y = np.array(target) 28 29#photo_array に画像データの配列を代入 30titles = df_join["data"] 31 32photo_array = [] 33 34for title in titles: 35 bgr = Image.open(title) 36 37 bgr = bgr.convert("L") 38 bgr = bgr.resize((50, 50)) 39 bgr = np.asarray(bgr) 40 bgr = bgr.reshape(50,50,1) 41 bgr = bgr/255 42 photo_array.append(bgr) 43 44x = np.array(photo_array) 45 46from sklearn.metrics import accuracy_score 47from sklearn.metrics import confusion_matrix 48from sklearn.model_selection import train_test_split 49(x_train,x_test, y_train, y_test) = train_test_split(x, y, test_size=0.3, random_state=0) 50 51num_class = 3 52 53model = keras.models.Sequential([ 54 keras.layers.Conv2D(32, kernel_size=(3,3), 55 activation="relu", 56 input_shape=(50,50,1)), 57 keras.layers.MaxPooling2D(pool_size=(2,2)), 58 keras.layers.Conv2D(64, (3, 3), activation="relu"), 59 keras.layers.MaxPooling2D(pool_size=(2,2)), 60 keras.layers.Dropout(0.5), 61 keras.layers.Flatten(), 62 keras.layers.Dense(128, activation="relu"), 63 keras.layers.Dropout(0.25), 64 keras.layers.Dense(num_class, activation="softmax") 65 66]) 67 68model.compile(optimizer="adam", loss="sparse_categorical_crossentropy",metrics=["accuracy"]) 69 70history = model.fit(x_train, y_train, epochs=10)

OUT

1--------------------------------------------------------------------------- 2InvalidArgumentError Traceback (most recent call last) 3<ipython-input-27-ef4f701c1d6f> in <module> 4----> 1 history = model.fit(x_train, y_train, epochs=10) 5 6/opt/anaconda3/lib/python3.7/site-packages/tensorflow/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_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing) 7 1098 _r=1): 8 1099 callbacks.on_train_batch_begin(step) 9-> 1100 tmp_logs = self.train_function(iterator) 10 1101 if data_handler.should_sync: 11 1102 context.async_wait() 12 13/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in __call__(self, *args, **kwds) 14 826 tracing_count = self.experimental_get_tracing_count() 15 827 with trace.Trace(self._name) as tm: 16--> 828 result = self._call(*args, **kwds) 17 829 compiler = "xla" if self._experimental_compile else "nonXla" 18 830 new_tracing_count = self.experimental_get_tracing_count() 19 20/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds) 21 886 # Lifting succeeded, so variables are initialized and we can run the 22 887 # stateless function. 23--> 888 return self._stateless_fn(*args, **kwds) 24 889 else: 25 890 _, _, _, filtered_flat_args = \ 26 27/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/eager/function.py in __call__(self, *args, **kwargs) 28 2941 filtered_flat_args) = self._maybe_define_function(args, kwargs) 29 2942 return graph_function._call_flat( 30-> 2943 filtered_flat_args, captured_inputs=graph_function.captured_inputs) # pylint: disable=protected-access 31 2944 32 2945 @property 33 34/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _call_flat(self, args, captured_inputs, cancellation_manager) 35 1917 # No tape is watching; skip to running the function. 36 1918 return self._build_call_outputs(self._inference_function.call( 37-> 1919 ctx, args, cancellation_manager=cancellation_manager)) 38 1920 forward_backward = self._select_forward_and_backward_functions( 39 1921 args, 40 41/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/eager/function.py in call(self, ctx, args, cancellation_manager) 42 558 inputs=args, 43 559 attrs=attrs, 44--> 560 ctx=ctx) 45 561 else: 46 562 outputs = execute.execute_with_cancellation( 47 48/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 49 58 ctx.ensure_initialized() 50 59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, 51---> 60 inputs, attrs, num_outputs) 52 61 except core._NotOkStatusException as e: 53 62 if name is not None: 54 55InvalidArgumentError: Received a label value of 3 which is outside the valid range of [0, 3). Label values: 3 3 3 1 3 3 3 1 3 1 3 1 3 3 1 1 2 3 3 3 3 3 3 2 2 2 3 1 3 3 3 2 56 [[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (defined at <ipython-input-27-ef4f701c1d6f>:1) ]] [Op:__inference_train_function_2140] 57 58Function call stack: 59train_function

試したこと

num_classを4にしたみたらなぜか計算できた

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

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

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

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

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

guest

回答1

0

ベストアンサー

3つのクラスに分類

の場合、ラベルは
1, 2, 3
ではなく
0, 1, 2
とするので、教師データに3があるとエラーになります

num_classを4にしたみたらなぜか計算できた

の場合のラベルは
0, 1, 2, 3
なので、ラベルに3があっても学習ではエラーになりませんが、学習後の推定で教師データに無かった0が発生するかもしれません

投稿2021/04/21 22:17

編集2021/04/21 22:25
jbpb0

総合スコア7653

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問