————————————————————————— ValueError Traceback (most recent call last) Cell In[219], line 37 34 model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) 36 # モデルのトレーニング —> 37 model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test)) 39 # モデルの評価 40 loss, accuracy = model.evaluate(X_test, y_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/framework/constant_op.py:98, in convert_to_eager_tensor(value, ctx, dtype) 96 dtype = dtypes.as_dtype(dtype).as_datatype_enum 97 ctx.ensure_initialized() —> 98 return ops.EagerTensor(value, ctx.device_name, dtype) ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).

エラーが発生したのは、ラベルデータが整数であるため、sparse_categorical_crossentropy 損失関数が適用されているためです。sparse_categorical_crossentropy は、ラベルが整数値であり、それらがクラスのインデックスを表す場合に使用されます。

このエラーを解決するためには、ラベルデータを整数値にエンコードする必要があります。LabelEncoder は文字列ラベルを整数に変換するのに役立ちますが、既に整数の場合はそれを行う必要はありません。

データセットの size 列が整数値であるかどうかを確認し、整数であればエンコードは不要です。もし size 列が文字列である場合は、その列を整数値に変換する必要があります。

次に、sparse_categorical_crossentropy 損失関数を使用するかどうかを決定し、必要に応じて適切な損失関数を選択します。整数ラベルを使用している場合、sparse_categorical_crossentropy を使用し、ラベルを one-hot エンコードしている場合は categorical_crossentropy を使用します。

データセットのラベルが整数であり、sparse_categorical_crossentropy を使用する場合、以下のようにモデルを再度構築します。

python
# モデルの構築 model = Sequential([ Dense(64, activation='relu', input_shape=(X_train.shape[1],)), Dense(64, activation='relu'), Dense(len(np.unique(y)), activation='softmax') ]) # モデルのコンパイル model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # モデルのトレーニング model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test)) # モデルの評価 loss, accuracy = model.evaluate(X_test, y_test) print("Test Loss:", loss) print("Test Accuracy:", accuracy)

size 列が文字列の場合、LabelEncoder を使用して整数にエンコードし、categorical_crossentropy を使用してモデルを構築する必要があります。

未分類

Posted by ぼっち