我正在尝试将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'])
我收到错误消息:无法将符号张量(dense_2_target_2:0)转换为numpy数组 在 SVM.fit(X,Y) 我还尝试将y_true和y_pred转换为np数组,但随后也出错了
答案 0 :(得分:0)
要训练具有梯度下降的神经网络,您需要一个可微分的模型。因此,您需要能够采用w.r.t.每个可训练的参数。
您的代码中出现了一些问题:
您可以在预训练模型的顶部而不是在完全连接的层上训练SVM。