Невозможно преобразовать символ c Tensor (density_2_target_2: 0) в массив numpy - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь реализовать SVM в качестве последнего уровня CNN для классификации, я пытаюсь реализовать этот код:

def custom_loss_value(y_true, y_pred):
  print(y_true)
  print(y_pred)
  X = y_pred
  print(X)
  Y = y_true
  Predict = []
  Prob = []
  scaler = StandardScaler()
  # X = scaler.fit_transform(X)
  param_grid = {'C': [0.1, 1, 8, 10], 'gamma': [0.001, 0.01, 0.1, 1]}
  SVM = GridSearchCV(SVC(kernel='rbf',probability=True), cv=3, param_grid=param_grid, scoring='auc', verbose=1)
  SVM.fit(X, Y)
  Final_Model = SVM.best_estimator_
  Predict = Final_Model.predict(X)
  Prob = Final_Model.predict_proba(X)
  return categorical_hinge(tf.convert_to_tensor(Y, dtype=tf.float32), tf.convert_to_tensor(Predict, dtype=tf.float32))
    

sgd = tf.keras.optimizers.SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss=custom_loss_value, optimizer=sgd, metrics=['accuracy'])

Я получаю сообщение об ошибке: Невозможно преобразовать символi c Tensor (density_2_target_2: 0) в массив numpy в строке SVM.fit (X, Y) Я также попытался преобразовать y_true и y_pred в массив np, но был получение ошибки, тогда также

1 Ответ

0 голосов
/ 10 июля 2020

Чтобы обучить нейронную сеть с градиентным спуском, вам нужна дифференцируемая модель. Итак, вам нужно иметь возможность использовать градиент по каждому обучаемому параметру.

Некоторые проблемы возникают в вашем коде:

  1. Вы не можете напрямую обучить SVM внутри потери Keras функция. Он принимает тензор TensorFlow и использует операции TF. На выходе также получается тензор тензорного потока. sklearn может работать с NumPy массивами или списками, но не с тензорами.
  2. Очень сложно и практически бесполезно обучать SVM через обратное распространение. Что-то об этом можно прочитать здесь.

Вы можете обучать SVM поверх предварительно обученной модели вместо полностью подключенного уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...