Auto-Keras / TF: не может сжать диммер [1], ожидаемый размер 1, получил 19 за «метрики / точность / сжатие» (op: «Squeeze») с входными формами: [?, 19] - PullRequest
0 голосов
/ 26 февраля 2020

Я знаю, что были некоторые проблемы, связанные с этим, такие как это и это , но ни один из них, похоже, не решил мою проблему. У меня есть датафрейм с потенциально до 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 по умолчанию?

Заранее спасибо и хорошего дня!

...