Skip to main content

TensorFlow 的深度学习项目模板

项目描述


TensorFlow 的深度学习项目模板。用于 TFDataset 处理和超参数优化的实用程序。

入门

Fork 存储库,导航到本地目录并按照下面的快速启动清单进行操作。数据应分为训练集、验证集和测试集,并以 .tfrecords 文件格式放置在单独的目录中。用于将 NumPy 数组转换为 .tfrecords 文件的实用程序包含在 utils.py 模块中。

快速启动清单

  • 在 models.py 中构建神经网络模型
    • 注意:需要指定稍后将优化的超参数。请参阅下面的型号选择部分。
  • 在graph.py中连接模型、定义损失、评估指标、优化器等
    • 注意:需要指定稍后将优化的超参数。请参阅下面的型号选择部分。
  • 在 data_shapes 字典中指定输入数据形状
    • 注意:数据形状不应该包括批量大小——这个信息被传递给采样器
    • 附加说明: data_shapes 中的顺序应与您在图中检索张量的顺序相对应
      • main.py 中: data_shapes = {'lowres': (32, 32, 3), 'highres': (128, 128, 3)}
      • graph.py 中: lowres, highres = data.get_batch()
  • 使用您的训练/有效/测试集的文件路径和数据形状字典创建一个 DataSampler 对象。
  • 定义要优化的超参数及其在字典中的相应域范围
  • 将您的图形对象和超参数字典通过gilgalad.opt.bayesian_optimization
  • (可选)在 plotting.py 中添加自定义绘图功能。通过 tfplot 将任何 matplotlib 图发送到 TensorBoard。

型号选择

Gil-Galad 模型选择是通过 Sherpa 的贝叶斯优化套件使用的,该套件利用了 sklearn 的高斯过程模块。贝叶斯优化通过核函数和先验指定函数分布。这里,均值函数对应于一个代理目标函数,其预测变量是模型超参数。函数的先验分布通过贝叶斯规则更新以说明试运行,其中自变量指定模型,因变量是对验证数据集上此类模型的评估。

使用 Gil-Galad,我们通过将参数字典传递给我们的图类来指定我们将优化哪些超参数,同时还在图和模型构建期间定义默认超参数,如下所示:

图级

class Graph(BaseGraph):

    def __init__(self, network, sampler, logdir=None, ckptdir=None):

        self.network = network
        self.data = sampler
        self.logdir = logdir
        self.ckptdir = ckptdir

        self.build_graph()

    def build_graph(self, params=None):

        tf.reset_default_graph()
        self.data.initialize()

        self.x, self.y, self.z = self.data.get_batch()

        self.y_ = self.network(self.x, params=params)

        self.loss = tf.losses.mean_squared_error(self.y, self.y_)

        update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
        with tf.control_dependencies(update_ops):
            opt = tf.train.AdamOptimizer(
                learning_rate=params['lr'] if params else 0.001
            )

            self.update = opt.minimize(
                loss=self.loss,
                var_list=self.network.vars,
                global_step=self.global_step
            )

模型级

class Model(BaseModel):
  def __init__(self, name):
    self.name = name

  def __call__(self, x, params):
    with tf.variable_scope(self.name) as vs:
      y = conv_2d(
        x=x,
        filters=params['filters'] if params else 64,
        kernel_size=params['kernel_size'] if params else 3,
        strides=2,
        activation=params['activation'] if params else 'relu'
      )

      return y

然后我们在字典中定义超参数域类型和范围。此信息伴随图形对象作为贝叶斯优化函数的参数。

import gilgalad as gg

hyperparameters = {
    'Discrete':
        {'filters': [64, 128],
         'kernel_size': [3, 5]},
    'Continuous':
        {'lr': [1e-5, 1e-3]},
    'Choice':
        {'activation': ['relu', 'prelu']}
}

best_model = gg.opt.bayesian_optimization(
    graph=graph,
    params=hyperparameters,
    max_trials=50
)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置发行版

gil_galad-0.1-py3-none-any.whl (23.6 kB 查看哈希)

已上传 py3

Gil_Galad-0.1-py3-none-any.whl (23.6 kB 查看哈希)

已上传 py3