tensorflow的深度学习项目模板
gil-galad的Python项目详细描述
TensorFlow的深度学习项目模板。用于tfdataset处理和超参数优化的实用程序。
开始
打开存储库,导航到本地目录,然后按照下面的快速入门清单进行操作。数据应分为培训、验证和测试集,并以.tfrecords文件格式放在单独的目录中。用于将numpy数组转换为.tfrecords文件的实用程序包含在utils.py模块中。
快速启动清单
- []在models.py中构建神经网络模型
- 注意:需要指定以后将优化的超参数。请参见下面的模型选择部分。
- []在graph.py中连接模型、定义损失、评估指标、优化器等
- 注意:需要指定以后将优化的超参数。请参见下面的模型选择部分。
- []在数据形状字典中指定输入数据形状
- 注意:数据形状不应包含批大小–此信息将传递给采样器
- 附加说明:数据形状的顺序应与检索图中张量的顺序相对应
- 在main.py:
data_shapes = {'lowres': (32, 32, 3), 'highres': (128, 128, 3)}
- 在graph.py:
lowres, highres = data.get_batch()
- 在main.py:
- []创建一个datasampler对象,其中包含指向您的训练/有效/测试集的文件路径和数据形状字典。
- []在字典中定义要优化的超参数及其对应的域范围
- []通过
gilgalad.opt.bayesian_optimization
- [](可选)在plotting.py中添加自定义打印功能。通过tfplot将任何matplotlib图形发送到tensorboard。
型号选择
gil-galad模型选择是通过sherpa的bayesian优化套件进行的,该套件利用sklearn的高斯过程模块。贝叶斯优化通过核函数和先验函数指定函数的分布。这里,均值函数对应于一个代理目标函数,其预测变量为模型超参数。函数的先验分布通过bayes规则进行更新,以说明独立变量指定模型的试运行,而因变量是在验证数据集上对此类模型的求值。
使用gil galad,我们通过向graph类传递一个参数字典来指定要优化的超参数,同时在graph和模型构建期间定义默认超参数,如下所示:
图形级别
classGraph(BaseGraph):def__init__(self,network,sampler,logdir=None,ckptdir=None):self.network=networkself.data=samplerself.logdir=logdirself.ckptdir=ckptdirself.build_graph()defbuild_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)withtf.control_dependencies(update_ops):opt=tf.train.AdamOptimizer(learning_rate=params['lr']ifparamselse0.001)self.update=opt.minimize(loss=self.loss,var_list=self.network.vars,global_step=self.global_step)
模型级别
classModel(BaseModel):def__init__(self,name):self.name=namedef__call__(self,x,params):withtf.variable_scope(self.name)asvs:y=conv_2d(x=x,filters=params['filters']ifparamselse64,kernel_size=params['kernel_size']ifparamselse3,strides=2,activation=params['activation']ifparamselse'relu')returny
然后在字典中定义超参数域的类型和范围。此信息将图形对象作为贝叶斯优化函数的参数。
importgilgaladasgghyperparameters={'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)