Ошибка сегментации (дамп ядра) при использовании библиотеки CVXPY - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь решить проблему оптимизации с помощью библиотеки 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)

ирония в том, что на меньшем, но фиктивном наборе данных код работает безупречно.

...