Я работаю с библиотекой 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