Ich möchte ein einfaches Vorwärts -Neuralnetz ausbilden, das ich in Penzai eingebaut habe, aber ich möchte für jede Parametergruppe unterschiedliche Lernraten verwenden. Ich speichere den Lernrate -Skalierungsfaktor in den Metadaten des einzelnen Parameters , z. So wie dieses: < /p>
def scale_by_metadata_value(metadata_field_name: str):
def init_fn(params):
learning_rates = jax.tree.map(
lambda param: param.metadata[metadata_field_name],
params,
is_leaf=(lambda node: isinstance(node, pz.ParameterValue))
)
return {"learning_rates": learning_rates}
def update_fn(updates, state, params):
del params
updates = jax.tree.map(
# This is where the TypeError is thrown:
lambda lr, g: lr * g, state["learning_rates"], updates
)
return updates, state
return optax.GradientTransformation(init_fn, update_fn)
< /code>
Wenn ich jedoch einen Trainingsschritt ausführe, erhalte ich < /p>
TypeError: unsupported operand type(s) for *: 'jaxlib.xla_extension.ArrayImpl' and 'ParameterValue'
Ich bin besonders verwirrt, weil alles funktioniert, wenn ich die Zeile scale_by_metadata_value ("Learning_Rate") entferne, obwohl optax.scale_by_learning_rate (0.01) im Wesentlichen das gleiche tut wie mit scale_by_MetadaTa_Value. Der beste Weg, um zu implementieren, scale_by_metadata_value ?
[url=viewtopic.php?t=14917]Ich möchte[/url] ein einfaches Vorwärts -Neuralnetz ausbilden, das ich in Penzai eingebaut habe, aber [url=viewtopic.php?t=14917]ich möchte[/url] für jede Parametergruppe unterschiedliche Lernraten verwenden. Ich speichere den Lernrate -Skalierungsfaktor in den Metadaten des einzelnen Parameters , z. So wie dieses: < /p> [code]Parameter( label='mlp/Affine_0/Linear.weights', value=, metadata={'learning_rate': 0.0012755102040816326}, ) [/code] Ich benutze Penzais statefultrainer für das Training und deklariere den Optimierer wie diesen: [code]optax.chain( optax.scale_by_adam(), scale_by_metadata_value("learning_rate"), optax.scale_by_learning_rate(0.01), ) [/code] wobei ich scale_by_metadata_value wie folgt definiere: [code]def scale_by_metadata_value(metadata_field_name: str): def init_fn(params): learning_rates = jax.tree.map( lambda param: param.metadata[metadata_field_name], params, is_leaf=(lambda node: isinstance(node, pz.ParameterValue)) ) return {"learning_rates": learning_rates}
def update_fn(updates, state, params): del params updates = jax.tree.map( # This is where the TypeError is thrown: lambda lr, g: lr * g, state["learning_rates"], updates ) return updates, state
return optax.GradientTransformation(init_fn, update_fn) < /code> Wenn ich jedoch einen Trainingsschritt ausführe, erhalte ich < /p> TypeError: unsupported operand type(s) for *: 'jaxlib.xla_extension.ArrayImpl' and 'ParameterValue' [/code] Ich bin besonders verwirrt, weil alles funktioniert, wenn ich die Zeile scale_by_metadata_value ("Learning_Rate") entferne, obwohl optax.scale_by_learning_rate (0.01) im Wesentlichen das gleiche tut wie mit scale_by_MetadaTa_Value. Der beste Weg, um zu implementieren, scale_by_metadata_value ?[code]import penzai.toolshed.basic_training import penzai import penzai.pz as pz import jax import jax.numpy as jnp import optax import numpy as np
Ich bin ziemlich neu in Optax. Es gibt diese Zeile in scale_by_lbfgs , die die Gewichtsberechnung in optax/optax/_src/Transformation durchführt. def scale_by_lbfgs(
...
def update_fn(
...
weight =...
Derzeit verwende ich den folgenden Swift -Code zum Skalieren von Zuschneiden und zum Erstellen eines kreisförmigen Bildes aus der übergebenen Benutzeroberfläche. Alles funktioniert bis zu iOS 18,...
Ich versuche, eine Tageskalenderansicht zu erstellen, ähnlich der iOS -Kalender -App. In der App gibt es eine Funktion, in der Sie den Kalender einklemmen können, um die Entfernung zwischen den...
Ich versuche, eine Tageskalenderansicht zu erstellen, ähnlich der iOS -Kalender -App. In der App gibt es eine Funktion, in der Sie den Kalender einklemmen können, um die Entfernung zwischen den...
Ich versuche, eine Tageskalenderansicht zu erstellen, ähnlich der iOS -Kalender -App. In der App gibt es eine Funktion, in der Sie den Kalender einklemmen können, um die Entfernung zwischen den...