Использование PySwarms для запуска кода CNN для оптимизации параметров CNN - PullRequest
0 голосов
/ 31 мая 2019

Я работаю с библиотекой PySwarm, но я не понимаю, где найти функцию потерь, поэтому я могу заставить ее вызывать некоторый код CNN, который обучает сеть и возвращает точность этого классификатора.

Я планировал настроить PSO, настроить домен для параметров, которые я хочу оптимизировать (скорости обучения, скорости выпадения между слоями для LeNet), а затем для каждой частицы обучить CNN с использованием этих параметров. Верните точность и используйте ее, чтобы оценить, какие частицы оставить.

Моя проблема в том, что я не знаю, что в приведенном примере кода заменить, чтобы он обучил CNN.

Я просматривал документацию на сайте PySwarm (https://pyswarms.readthedocs.io/en/latest/examples/usecases/train_neural_network.html), но я все еще не уверен, как изменить ее, чтобы получить желаемый результат.

def forward_prop(self, params):
    """Forward propagation as objective function
    This computes for the forward propagation of the neural network, as
    well as the loss. It receives a set of parameters that must be
    rolled-back into the corresponding weights and biases.
    Inputs
    ------
    params: np.ndarray
        The dimensions should include an unrolled version of the
        weights and biases.
    Returns
    -------
    float
        The computed negative log-likelihood loss given the parameters
    """
    # Neural network architecture
    n_inputs = self.n_inputs
    n_hidden = self.n_hidden
    n_classes = self.n_classes

    # Roll-back the weights and biases
    W1 = params[0:80].reshape((n_inputs, n_hidden))
    b1 = params[80:100].reshape((n_hidden,))
    W2 = params[100:160].reshape((n_hidden, n_classes))
    b2 = params[160:163].reshape((n_classes,))

    # Perform forward propagation
    z1 = self.x_data.dot(W1) + b1  # Pre-activation in Layer 1
    a1 = np.tanh(z1)     # Activation in Layer 1
    z2 = a1.dot(W2) + b2 # Pre-activation in Layer 2
    logits = z2          # Logits for Layer 2

    # Compute for the softmax of the logits
    exp_scores = np.exp(logits)
    probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)

    # Compute for the negative log likelihood
    N = 150 # Number of samples
    corect_logprobs = -np.log(probs[range(N), self.y_data])
    loss = np.sum(corect_logprobs) / N

    return loss

Прямо сейчас у меня нет выхода, но я надеялся получить значение точности, чтобы мы могли использовать это при выборе частиц для остальной части PSO

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