————————————————————————— InvalidArgumentError Traceback (most recent call last) Cell In[183], line 31 28 model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) 30 # モデルのトレーニング —> 31 history = model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test)) 34 # テストデータでの予測 35 y_pred = model.predict(X_test) File /home/share/temp/venv/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs) 67 filtered_tb = _process_traceback_frames(e.__traceback__) 68 # To get the full stack trace, call: 69 # `tf.debugging.disable_traceback_filtering()` —> 70 raise e.with_traceback(filtered_tb) from None 71 finally: 72 del filtered_tb File /home/share/temp/venv/lib/python3.8/site-packages/tensorflow/python/eager/execute.py:53, in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 51 try: 52 ctx.ensure_initialized() —> 53 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, 54 inputs, attrs, num_outputs) 55 except core._NotOkStatusException as e: 56 if name is not None: … File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/backend.py”, line 5762, in sparse_categorical_crossentropy res = tf.nn.sparse_softmax_cross_entropy_with_logits( Node: ‘sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits’ Received a label value of 140 which is outside the valid range of [0, 1). Label values: 120 80 100 120 140 100 60 100 140 100 60 60 60 100 100 60 100 80 80 60 100 60 60 100 120 60 60 140 60 60 60 60 [[{{node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]] [Op:__inference_train_function_33833] Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings…
エラーメッセージを見ると、sparse_categorical_crossentropyの呼び出しで、ラベル値が範囲外であることが原因のようです。sparse_categorical_crossentropyは、クラスが互いに排他的であり、整数のラベルを扱う場合に使用されます。しかし、ここではラベルが140などの整数値であり、クラス数が1つしかない可能性があります。
この問題を解決するためには、次のいずれかの方法を取ることができます:
-
ラベルをバイナリ形式にエンコードする: ラベルが0と1の2つのクラスしかない場合は、
binary_crossentropyを使用します。この場合、ラベルは0または1のいずれかにエンコードされる必要があります。 -
モデルの損失関数を変更する: クラスが2つしかない場合、
binary_crossentropyを使用します。クラスが2つ以上ある場合は、クラス数に合わせてcategorical_crossentropyを使用します。
ここでは、バイナリ分類を行う場合の例を示します。
python
# ニューラルネットワークのモデル構築 model = Sequential() model.add(Dense(64, activation='relu', input_dim=X_train.shape[1])) model.add(Dense(32, activation='relu')) model.add(Dense(1, activation='sigmoid')) # クラスが2つの場合はsigmoidを使用 # モデルのコンパイル model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # モデルのトレーニング history = model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
このように、出力層の活性化関数をsigmoidに設定し、損失関数をbinary_crossentropyに設定することで、バイナリ分類問題に対応できます。

ディスカッション
コメント一覧
まだ、コメントがありません