from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from keras.models import Sequential from keras.layers import Dense # データをトレーニングセットとテストセットに分割 X_train, X_test, y_train, y_test = train_test_split(X_combined, y, test_size=0.3, random_state=42) # データの標準化 scaler = StandardScaler(with_mean=False) # with_mean=Falseを追加 X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) X_train_scaled = X_train.toarray() X_test_scaled = X_test.toarray() # クラス数を取得 num_classes = len(np.unique(y_train)) # モデルの作成 model = Sequential([ Dense(64, activation=’relu’, input_shape=(X_train_scaled.shape[1],)), Dense(64, activation=’relu’), Dense(num_classes, activation=’softmax’) # 多クラス分類用の出力層 ]) # モデルのコンパイル model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) # モデルのトレーニング history = model.fit(X_train_scaled, y_train, epochs=5, batch_size=32, validation_data=(X_test_scaled, y_test)) # テストデータでの予測と評価 loss, accuracy = model.evaluate(X_test_scaled, y_test) print(“Test Loss:”, loss) print(“Test Accuracy:”, accuracy)

このコードは、データの標準化とSparseTensorの密な配列への変換が正しく行われているように見えます。ただし、1つのポイントを修正する必要があります。

モデルを構築する際、入力の形状を指定する部分でエラーが発生しています。このエラーは、input_shapeで指定された入力の次元数が正しくないことが原因です。

入力の形状は、密な配列に変換されたX_train_scaledの列数に対応する必要があります。したがって、次のように修正する必要があります。

python
# モデルの作成 model = Sequential([ Dense(64, activation='relu', input_shape=(X_train_scaled.shape[1],)), Dense(64, activation='relu'), Dense(num_classes, activation='softmax') # 多クラス分類用の出力層 ])

この修正を行うと、モデルの構築が正しく行われ、トレーニングが進むはずです。

未分類

Posted by ぼっち