Я пытаюсь решить проблему оптимизации с помощью библиотеки CVXPY. Мой код работает правильно с фиктивным набором данных, но дает сбой, когда я ввожу фактический набор данных. Я получил ошибку
Segmentation fault (core dumped)
Я пытался найти решение на https://github.com/cvxgrp/cvxpy/issues/69, https://github.com/cvxgrp/cvxpy/issues/984, но безрезультатно
Мой пример кода выглядит как
import cvxpy as cp
import numpy as np
from numpy import linalg as LA
X_source = np.load("seen_class_vgg16_features.npy")
Y_source = np.load("seen_class_labels.npy")
#Shuffling the two feature matrices along with their corresponding labels
from sklearn.utils import shuffle
Xs, ys = shuffle(X_source, Y_source, random_state=0)
#Now loading all classes attributes
all_classes_attributes = np.load("all_classes_attributes.npy")
ys = [int(i) for i in ys]
ys = np.asarray(ys)
Ys = []
for i in ys:
Ys.append(all_classes_attributes[i-1])
Ys = np.asarray(Ys)
# Define and solve the CVXPY problem.
Ds = cp.Variable(shape=(312,4096))
def objective_fn(Xs, Ys, Ds, lamda1, lamda2):
return (cp.square(cp.norm(Xs-Ys*Ds,'fro')) + lamda1*cp.square(cp.norm(Ds,'fro')) + lamda2*(cp.square(cp.norm(Ds,'fro')) - 1))
lamda1 = cp.Parameter(nonneg=True)
lamda2 = cp.Parameter(nonneg=True)
Ds_values = []
lamda1_values = []
lamda2_values = []
problem = cp.Problem(cp.Minimize(objective_fn(Xs,Ys,Ds,lamda1,lamda2)))
lambd1_values = np.logspace(-2, 3, 2)
lambd2_values = np.logspace(-2, 3, 2)
for lam1 in lambd1_values:
for lam2 in lambd2_values:
lamda1.value = lam1
lamda2.value = lam2
problem.solve(qcp=True, verbose=True)
print("Optimal value of Ds = ",Ds.value)
lamda1_values.append(lam1)
lamda2_values.append(lam2)
Ds_values.append(Ds.value)
ирония в том, что на меньшем, но фиктивном наборе данных код работает безупречно.