如何通过名称获取TensorFlow优化器?寻求技术帮助
解决TensorFlow中通过名称访问优化器的问题
嘿,我来帮你搞定这个问题!你提到想通过名称访问TensorFlow优化器,下面给你梳理几个实用的方法,结合你的代码场景来适配~
方法1:用TensorFlow内置的注册类获取
TensorFlow的优化器本身有注册机制,你可以直接通过tf.train.Optimizer.get_class()(TF1.x)方法传入名称字符串,就能拿到对应的优化器类,之后实例化就行。示例代码:
# 以获取Adam优化器为例 optimizer_class = tf.train.Optimizer.get_class("Adam") optimizer = optimizer_class(learning_rate=0.001)
方法2:手动构建名称映射字典
如果需要限定可选的优化器或者自定义映射,自己建一个字典是更灵活的方式,把名称和对应的优化器类一一对应:
# 先定义映射关系 optimizer_map = { "Adam": tf.train.AdamOptimizer, "SGD": tf.train.GradientDescentOptimizer, "RMSProp": tf.train.RMSPropOptimizer } # 根据名称获取并实例化 target_optimizer = "Adam" optimizer = optimizer_map[target_optimizer](learning_rate=0.001)
适配你代码的完整示例
看你给出的代码片段没写完,我补全后整合优化器的调用,给你一个完整的极简示例:
import sys import numpy as np import tensorflow as tf print( "Python version: {0}".format(sys.version) ) print( "Tensorflow version: {0}".format(tf.__version__) ) print('') # 构建模型部分 l_input = tf.placeholder(tf.float32, shape=(None, 2), name='input') l_dense = tf.layers.dense(l_input, units=1, activation=None) l_output = tf.identity(l_dense, name='output') # 补全你未完成的identity操作 # 通过名称获取优化器(这里用第一种方法) optimizer_class = tf.train.Optimizer.get_class("Adam") optimizer = optimizer_class(learning_rate=0.001) # 后续定义损失与训练操作 loss = tf.reduce_mean(tf.square(l_output - tf.placeholder(tf.float32, shape=(None,1)))) train_op = optimizer.minimize(loss)
注意:如果你用的是TensorFlow 2.x版本,API有调整,优化器在tf.keras.optimizers下,获取方式可以用tf.keras.optimizers.get("adam"),或者直接实例化对应的类
内容的提问来源于stack exchange,提问作者Uwe Köhler
相关产品推荐
相关产品推荐

