是的,但你需要对命名空间(namespace)倍加小心。好的一点是,这种方法简化了一切:例如,你可以加载预训练的 VGG-16,访问图中的任何节点,嵌入自己的操作和训练整个图! 如果你只想微调(fine-tune)节点,你可以在任意地方停止梯度来避免训练整个图。 import tensorflow as tf # Load the VGG-16 model in the default graph vgg_saver = tf.train.import_meta_graph(dir + 'gg/resultsgg-16.meta') # Access the graph vgg_graph = tf.get_default_graph() # Retrieve VGG inputs self.x_plh = vgg_graph.get_tensor_by_name('input:0') # Choose which node you want to connect your own graph output_conv =vgg_graph.get_tensor_by_name('conv1_2:0') # output_conv =vgg_graph.get_tensor_by_name('conv2_2:0') # output_conv =vgg_graph.get_tensor_by_name('conv3_3:0') # output_conv =vgg_graph.get_tensor_by_name('conv4_3:0') # output_conv =vgg_graph.get_tensor_by_name('conv5_3:0') # Stop the gradient for fine-tuning output_conv_sg = tf.stop_gradient(output_conv) # It's an identity function # Build further operations output_conv_shape = output_conv_sg.get_shape().as_list() W1 = tf.get_variable('W1', shape=[1, 1, output_conv_shape[3], 32], initializer=tf.random_normal_initializer(stddev=1e-1)) b1 = tf.get_variable('b1', shape=[32], initializer=tf.constant_initializer(0.1)) z1 = tf.nn.conv2d(output_conv_sg, W1, strides=[1, 1, 1, 1], padding='SAME') + b1 a = tf.nn.relu(z1) 附录:更多关于 TF 数据生态系统的内容 我们在这里谈论谷歌,他们主要使用内部构建的工具来处理他们的工作,所以数据保存的格式为 ProtoBuff 也是不奇怪的。 协议缓冲区 协议缓冲区(Protocol Buffer/简写 Protobufs)是 TF 有效存储和传输数据的常用方式。 我不在这里详细介绍它,但可以把它当成一个更快的 JSON 格式,当你在存储/传输时需要节省空间/带宽,你可以压缩它。简而言之,你可以使用 Protobufs 作为: 一种未压缩的、人性化的文本格式,扩展名为 .pbtxt 一种压缩的、机器友好的二进制格式,扩展名为 .pb 或根本没有扩展名 这就像在开发设置中使用 JSON,并且在迁移到生产环境时为了提高效率而压缩数据一样。用 Protobufs 可以做更多的事情,如果你有兴趣可以查看教程 整洁的小技巧:在张量流中处理 protobufs 的所有操作都有这个表示「协议缓冲区定义」的「_def」后缀。例如,要加载保存的图的 protobufs,atv,可以使用函数:tf.import_graph_def。要获取当前图作为 protobufs,可以使用:Graph.as_graph_def()。 文件的架构 回到 TF,当保存你的数据时,你会得到 5 种不同类型的文件: 「检查点」文件 「事件(event)」文件 「文本 protobufs」文件 一些「chkp」文件 一些「元 chkp」文件 现在让我们休息一下。当你想到,当你在做机器学习时可能会保存什么?你可以保存模型的架构和与其关联的学习到的权重。你可能希望在训练或事件整个训练架构时保存一些训练特征,如模型的损失(loss)和准确率(accuracy)。你可能希望保存超参数和其它操作,以便之后重新启动训练或重复实现结果。这正是 TensorFlow 的作用。 在这里,检查点文件的三种类型用于存储模型及其权重有关的压缩后数据。 检查点文件只是一个簿记文件,你可以结合使用高级辅助程序加载不同时间保存的 chkp 文件。 元 chkp 文件包含模型的压缩 Protobufs 图以及所有与之关联的元数据(集合、学习速率、操作等)。 chkp 文件保存数据(权重)本身(这一个通常是相当大的大小)。 如果你想做一些调试,pbtxt 文件只是模型的非压缩 Protobufs 图。 最后,事件文件在 TensorBoard 中存储了所有你需要用来可视化模型和训练时测量的所有数据。这与保存/恢复模型本身无关。 下面让我们看一下结果文件夹的屏幕截图: 一些随机训练的结果文件夹的屏幕截图 (责任编辑:本港台直播) |