Python Tensorflow估计器:缓存瓶颈

Python Tensorflow估计器:缓存瓶颈,python,tensorflow,machine-learning,classification,Python,Tensorflow,Machine Learning,Classification,在学习tensorflow图像分类教程时,首先会缓存每个图像的瓶颈: 我已经使用tensorflow的估计器重写了培训。这确实简化了所有代码。但是我想在这里缓存瓶颈特性 这是我的型号fn。我想缓存密集层的结果,这样我就可以对实际训练进行更改,而不必每次都计算瓶颈 我怎样才能做到这一点 def型号(功能、标签、模式、参数): is_training=mode==tf.estimator.ModeKeys.TRAIN num\u classes=len(参数['label\u vocab']) 模

在学习tensorflow图像分类教程时,首先会缓存每个图像的瓶颈:

我已经使用tensorflow的
估计器
重写了培训。这确实简化了所有代码。但是我想在这里缓存瓶颈特性

这是我的
型号fn
。我想缓存
密集
层的结果,这样我就可以对实际训练进行更改,而不必每次都计算瓶颈

我怎样才能做到这一点

def型号(功能、标签、模式、参数):
is_training=mode==tf.estimator.ModeKeys.TRAIN
num\u classes=len(参数['label\u vocab'])
模块=集线器模块(参数['module_spec'],可培训=is_training,参数['train_module']))
瓶颈张量=模块(特征['image'])
使用tf.name\u范围(“最终再培训操作”):
logits=tf.layers.dense(瓶颈张量,单位=num\u类,可训练=is\u训练)#保存这个?
def列操作fn(丢失):
优化器=tf.train.AdamOptimizer()
return optimizer.minimize(loss,global\u step=tf.train.get\u global\u step())
head=tf.contrib.estimator.multi_class_head(n_class=num_class,label_词汇表=params['label_vocab']))
返回head.create\u估计器\u spec(
特征、模式、登录、标签,列车运行fn=列车运行fn
)

TF不能像您编写代码那样工作。你应该:

  • 将瓶颈从原始网络导出到文件
  • 使用瓶颈结果作为输入,使用另一个网络来训练数据

  • 进一步阐述@Feng所说的:

    看到和

    类似的方法应该可以工作(未经测试):


    您也可以使用
    Dataset.cache
    ,但我不能100%确定详细信息。

    您能举个例子说明如何做到这一点吗?
    # Serialize the data into two tfrecord files
    tf.enable_eager_execution()
    feature_extractor = ...
    features_file = tf.python_io.TFRecordWriter('features.tfrec')
    label_file = tf.python_io.TFRecordWriter('labels.tfrec')
    
    for images, labels in dataset:
      features = feature_extractor(images)
      features_file.write(tf.serialize_tensor(features))
      label_file.write(tf.serialize_tensor(labels))
    
    # Parse the files and zip them together
    def parse(type, shape):
      _def parse(x):
        result = tf.parse_tensor(x, out_type=shape)
        result = tf.reshape(result, FEATURE_SHAPE)
        return result
      return parse
    
    features_ds = tf.data.TFRecordDataset('features.tfrec')
    features_ds = features_ds.map(parse(tf.float32, FEATURE_SHAPE), num_parallel_calls=AUTOTUNE)
    
    labels_ds = tf.data.TFRecordDataset('labels.tfrec')
    labels_ds = labels_ds.map(parse(tf.float32, FEATURE_SHAPE), num_parallel_calls=AUTOTUNE)
    
    ds = tf.data.Dataset.zip(features_ds, labels_ds)
    ds = ds.unbatch().shuffle().repeat().batch().prefetch()...