В настоящее время он остановлен на отметке ок. 2500 итераций, но я хочу, чтобы он выполнялся в течение полных 20001 итераций. Как мне это сделать? Ниже приведен полный код:
def get_loss_and_grads(params):
shapes = [w.shape for w in model.get_weights()]
split_params = np.split(params, np.cumsum([np.prod(shape) for shape in shapes[:-1]]))
weights = [tf.Variable(param.reshape(shape)) for param, shape in zip(split_params, shapes)]
model.set_weights(weights)
with tf.GradientTape() as tape:
loss = combined_loss(X_train_tf[:, 0:1], X_train_tf[:, 1:2], x_init_tf, t_init_tf, u_initial_tf, x_bc_tf, t_bc_tf)
gradients = tape.gradient(loss, model.trainable_variables)
flattened_gradients = np.concatenate([grad.numpy().flatten() for grad in gradients])
return loss.numpy().astype(np.float64), flattened_gradients
X_train_tf = tf.convert_to_tensor(X_train.astype(np.float32))
x_init_tf = tf.convert_to_tensor(x_init.astype(np.float32))
t_init_tf = tf.convert_to_tensor(t_init.astype(np.float32))
u_initial_tf = tf.convert_to_tensor(u_initial.astype(np.float32))
x_bc_tf = tf.convert_to_tensor(x_bc.astype(np.float32))
t_bc_tf = tf.convert_to_tensor(t_bc.astype(np.float32))
shapes = [w.shape for w in model.get_weights()]
params = np.concatenate([w.flatten() for w in model.get_weights()])
class PrintLossCallback:
def __init__(self, print_freq=100):
self.print_freq = print_freq
self.iteration = 0
def __call__(self, xk):
self.iteration += 1
if self.iteration % self.print_freq == 0:
loss, _ = get_loss_and_grads(xk)
print(f"Iteration {self.iteration}, Loss: {loss}")
start_time = time.time()
results = scipy.optimize.minimize(
fun=get_loss_and_grads,
x0=params,
jac=True,
method='L-BFGS-B',
options={'maxiter': 20001, 'disp': True, 'ftol': 0.0, 'gtol': 0.0, 'maxcor': 50},
callback=PrintLossCallback(print_freq=100)
)
optimized_params = results.x
split_params = np.split(optimized_params, np.cumsum([np.prod(shape) for shape in shapes[:-1]]))
model.set_weights([param.reshape(shape) for param, shape in zip(split_params, shapes)])
elapsed_time = time.time() - start_time
elapsed_minutes = elapsed_time / 60.0 # Convert seconds to minutes
print(f"Execution time: {elapsed_minutes:.2f} minutes")
Заранее спасибо.
Самый лучший,
Саиф Ур Рехман.
Я старался установить для 'ftol': 0.0, 'gtol': 0.0 и maxiter большое число, например 200001,, но все напрасно.
Я хочу запустить приведенный ниже код для maxiter = 20001. Я не хочу, чтобы его останавливали по каким-то критериям по умолчанию. [code]results = scipy.optimize.minimize( fun=get_loss_and_grads, x0=params, jac=True, method='L-BFGS-B', options={'maxiter': 20001, 'disp': True, 'ftol': 0.0, 'gtol': 0.0, 'maxcor': 50}, callback=PrintLossCallback(print_freq=100) ) [/code] В настоящее время он остановлен на отметке ок. 2500 итераций, но я хочу, чтобы он выполнялся в течение полных 20001 итераций. Как мне это сделать? Ниже приведен полный код: [code]def get_loss_and_grads(params): shapes = [w.shape for w in model.get_weights()] split_params = np.split(params, np.cumsum([np.prod(shape) for shape in shapes[:-1]])) weights = [tf.Variable(param.reshape(shape)) for param, shape in zip(split_params, shapes)] model.set_weights(weights)
with tf.GradientTape() as tape: loss = combined_loss(X_train_tf[:, 0:1], X_train_tf[:, 1:2], x_init_tf, t_init_tf, u_initial_tf, x_bc_tf, t_bc_tf) gradients = tape.gradient(loss, model.trainable_variables)
flattened_gradients = np.concatenate([grad.numpy().flatten() for grad in gradients]) return loss.numpy().astype(np.float64), flattened_gradients
optimized_params = results.x split_params = np.split(optimized_params, np.cumsum([np.prod(shape) for shape in shapes[:-1]])) model.set_weights([param.reshape(shape) for param, shape in zip(split_params, shapes)])
[/code] Заранее спасибо. Самый лучший, Саиф Ур Рехман. Я старался установить для 'ftol': 0.0, 'gtol': 0.0 и maxiter большое число, например 200001,, но все напрасно.
Надеюсь, у вас все хорошо.
Я хочу запустить приведенный ниже код для maxiter = 20001. Я не хочу, чтобы он останавливался по каким-то критериям по умолчанию.
results = scipy.optimize.minimize(
fun=get_loss_and_grads,
x0=params,
jac=True,...
Я пытаюсь понять, почему scipy.optimize.least_squares существует в scipy. Эту функцию можно использовать для подгонки модели. Однако можно использовать scipy.optimize.minimize, чтобы сделать то же самое. Единственная разница заключается в том, что...
Я пытаюсь понять, почему scipy.optimize.least_squares существует в scipy. Эту функцию можно использовать для подгонки модели. Однако можно использовать scipy.optimize.minimize, чтобы сделать то же самое. Единственная разница заключается в том, что...
Я оцениваю модель интервальной регрессии. Я написал свою функцию вероятности (см. Integ, Stata) как указано, и сравнил свои результаты с Stata. Я нахожу почти точно (в пределах 0,001) те же параметры, что и STATA, но алгоритм BFGS, кажется, все еще...
Я хочу найти локальный минимум для функции, которая зависит от двух переменных. Для этого я планировал использовать функцию scipy.optimize.minimize с методом newton-cg , поскольку я могу вычислить якобиан и гессиан аналитически.
Однако, когда мои...