Я знаю, что были некоторые проблемы, связанные с этим, такие как это и это , но ни один из них, похоже, не решил мою проблему. У меня есть датафрейм с потенциально до 42 классами на функцию. Поскольку набор данных несбалансирован, я использую SMOTE для пересчета классов меньшинства. Теперь, когда я пытаюсь начать вычисление модели с помощью авто-кераса, я получаю следующую ошибку:
Train for 11653 steps, validate for 2914 steps
Epoch 1/10
1/11653 [..............................] - ETA: 28:13WARNING:tensorflow:Early stopping conditioned on
metric `val_loss` which is not available. Available metrics are:
WARNING:tensorflow:Can save best model only with val_accuracy available, skipping.
Traceback (most recent call last):
File "/home/user/envs/ma-automl-ppm/lib/python3.6/site-
packages/tensorflow_core/python/framework/ops.py", line 1619, in _create_c_op
c_op = c_api.TF_FinishOperation(op_desc)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Can not squeeze dim[1], expected a
dimension of 1, got 19 for 'metrics/accuracy/Squeeze' (op: 'Squeeze') with input shapes: [?,19].
During handling of the above exception, another exception occurred:
....
File "/home/user/envs/ma-automl-ppm/lib/python3.6/site-
packages/tensorflow_core/python/framework/func_graph.py", line 595, in _create_op_internal
compute_device)
File "/home/user/envs/ma-automl-ppm/lib/python3.6/site-
packages/tensorflow_core/python/framework/ops.py", line 3322, in _create_op_internal
op_def=op_def)
File "/home/user/envs/ma-automl-ppm/lib/python3.6/site-
packages/tensorflow_core/python/framework/ops.py", line 1786, in __init__control_input_ops)
File "/home/user/envs/ma-automl-ppm/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py", line 1622, in _create_c_op raise ValueError(str(e))
ValueError: Can not squeeze dim[1], expected a dimension of 1, got 19 for 'metrics/accuracy/Squeeze'
(op: 'Squeeze') with input shapes: [?,19].
Я думаю, что ответ, данный в этом сообщении, является самым близким к моему проблема, но я не знаю, как это использовать. Вот мой код, который предполагает, что меня интересуют только первые две функции моего набора данных. Поскольку sparse_categorical_crossentropy можно использовать таким образом, что метки не нужно кодировать в горячем виде, я бы хотел использовать этот показатель c.
df_short = df_activities_trans.iloc[:,0:1+1]
df_short = df_short.dropna()
df_short = df_short.astype(int)
df_short = df_short[df_short.replace(df_short.apply(pd.Series.value_counts)).gt(5).all(1)]
X = df_short.iloc[:,0:1]
Y = df_short.iloc[:,1]
X_resampled, y_resampled = SMOTE().fit_resample(X,Y)
X_resampled = pd.DataFrame(X_resampled, dtype=int)
y_resampled = pd.DataFrame(y_resampled, dtype=int)
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X_resampled, y_resampled)
model = ak.StructuredDataClassifier(loss='sparse_categorical_crossentropy', metrics=['accuracy',
'sparse_categorical_accuracy'], max_trials=1)
model.fit(X_train, y_train, epochs=10)
Я не уверен, что мне нужно изменить форму моего данные, ожидаемые Tensorflow, или это связано с конфигурацией моей модели, так как в ней говорится:
28:13WARNING:tensorflow:Early stopping conditioned on
metric `val_loss` which is not available. Available metrics are:
Но я нигде не определял val_loss, и стандартная конфигурация autokeras.StructuredDataClassifier не определяет считать val_loss по умолчанию?
Заранее спасибо и хорошего дня!