标签: tensorflow-estimator

Tensorflow估算器:average_loss vs loss

tf.estimator,average_loss和之间有什么区别loss?我会从名字中猜到前者将被后者除以记录的数量,但事实并非如此; 有几千条记录,后者大约是前者的三到四倍.

machine-learning tensorflow tensorflow-estimator

7
推荐指数
1
解决办法
3091
查看次数

为什么TensorFlow Estimator API将输入作为lambda?

tf.estimatorAPI需要输入"输入功能"返回Dataset秒.例如,Estimator.train()拿一个input_fn(文档).

在我看过的例子中,无论何时手动提供此函数,它都是无争议的lambda.

这是不是意味着函数总是返回相同的值?或者它是否多次调用而没有参数?我无法找到关于此的文档.为什么函数不像train()只是Dataset明确地输入?

python tensorflow tensorflow-datasets tensorflow-estimator

7
推荐指数
1
解决办法
626
查看次数

Tensorflow:将Keras模型集成到Estimator模型中

我正在研究在估计器的model_fn中使用预训练的keras.applications模型的问题

在我的研究小组中,我们使用Tensorflow估计器,因为它们通过并行训练和评估,训练的热启动,易于使用等提供了许多优势。因此,我需要一个可以在估计器的model_fn中使用的解决方案。

基本上,我想在model_fn中使用预训练图,尽管我可以使用来自keras.applications的模型。不幸的是,到目前为止,我无法以适当的方式将keras.applications模型插入到model_fn中。

我想使用不带顶层(resnet50,mobilenet,nasnet ...)的可视提取器来提取特征向量,稍后我可能要微调此提取。这将排除使用视觉提取器作为model_fn外部的预处理步骤。

在对真实数据集进行了大量尝试之后,我又恢复了旧的MNIST,并提出了一个最小的示例来表明我在寻找什么。我在这里查看了关于stackoverflow的信息,并且最初遵循了这一解释

在下面的示例中,我尝试将具有移动网络架构的MNIST数据集归类为可视提取器。有两个使用这些功能的示例版本和一个完全不使用keras模型的示例。该代码非常接近TF官方custom_estimator示例。仅缩小数据集以使其易于装入内存,并且将图像放大并转换为rgb以适应网络结构。

示例案例1和2导致停滞的训练损失和评估的恒定损失。第三种情况表明,没有模型,损失的确会减少(尽管总体性能很差,可以预见)。在这个示例中,我并没有追求高性能!我只是想表明我遇到的困难,希望有人能提供帮助。

想法和进一步的想法:

  • 评估损失恒定的事实可能意味着该模型根本不会传递输入。但是,我该如何验证呢?在这种混合tf / keras的情况下,我无法获取tf.historgram来绘制激活或权重。
  • 另一则帖子指出,keras在后台保持一个会话。尽管由于estimator API建立了两个用于训练和评估的图形,但这可能会在后台变成混乱的情况。
  • 如果有一种方法可以仅使用权重图,则不需要keras模型的OO接口,但是那怎么办?
  • 在不使用模型功能的情况下,在keras后端中设置学习阶段也会造成损失的增加,这表明了两个会话的问题,因此在下面进行注释。

我还在github上打开了一个问题,因为在我看来该功能应该可以工作。

在下面,您可以找到独立的示例。复制/粘贴后,它应该立即可用。任何帮助深表感谢!


        import tensorflow as tf
        import numpy as np

        from keras.datasets import mnist


        # switch to example 1/2/3
        EXAMPLE_CASE = 3

        # flag for initial weights loading of keras model
        _W_INIT = True


        def dense_net(features, labels, mode, params):
            # --- code to load a keras application ---

            # commenting in this …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow tensorflow-estimator transfer-learning

7
推荐指数
0
解决办法
473
查看次数

在TensorFlow中使用实验的优势

许多TensorFlow的示例应用程序通过调用创建Experiments并运行其中一个Experiment方法tf.contrib.data.learn_runner.run.看起来它Experiment本质上是一个包装器Estimator.

创建和运行Experiment所需的代码比创建,训练和评估所需的代码更复杂Estimator.我确信使用Experiments 有一个优点,但我无法弄清楚它是什么.有人能填补我吗?

python machine-learning deep-learning tensorflow tensorflow-estimator

6
推荐指数
1
解决办法
1092
查看次数

如何在 tensorflow tfrecords 中增加数据?

我使用 tfrecords 存储我的数据,我使用DatasetAPI作为张量读取它们,然后我使用EstimatorAPI 进行训练。现在,我想对数据集中的每个项目进行在线数据增强,但尝试了一段时间后,我找不到办法做到这一点。我想要随机翻转,随机旋转和其他操纵器。

我正在按照教程中给出的说明使用自定义估计器,这是我的 CNN,但我不确定数据增强步骤发生在哪里。

deep-learning tensorflow tensorflow-slim tensorflow-datasets tensorflow-estimator

6
推荐指数
1
解决办法
4274
查看次数

使用比Ram更多数据的Tensorflow数据集和估算器

我最近改变了我的建模框架以使用自定义Tensorflow EstimatorsDatasets,并且对这个工作流程非常满意.

但是,我刚刚注意到我的dataset_input_fn如何从tfrecords加载数据的问题.我的输入函数是在Tensorflow文档中的示例之后建模的.当我有更多的例子而不是我可以适应RAM时,会出现问题.如果我有1e6个示例,并将我的shuffle buffer_size设置为1e5,则选择1e5示例的子集一次,随机,然后迭代.这意味着我的模型仅在我的整个数据集的10%上进行训练.设置此行为的代码完全来自Tensorflow文档示例代码:

dataset = dataset.map(parser)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(32)
dataset = dataset.repeat(num_epochs)
iterator = dataset.make_one_shot_iterator()
Run Code Online (Sandbox Code Playgroud)

我的问题:当我训练时,是否有可能在最初的1e5之外用新的例子填充shuffle缓冲区?one_shot_iterator是否支持此类功能?我需要使用可初始化的迭代器吗?

谢谢!

tensorflow tensorflow-datasets tensorflow-estimator

6
推荐指数
1
解决办法
759
查看次数

Tensorflow MNIST Estimator:批量大小会影响图表的预期输入吗?

我已经按照TensorFlow MNIST Estimator教程进行了训练,并且训练了我的MNIST模型.
它似乎工作正常,但如果我在Tensorboard上可视化它我看到一些奇怪的东西:模型所需的输入形状是100 x 784.

这是一个屏幕截图:正如您在右侧框中看到的,预期输入大小为100x784.
我以为我会看到?x784那里.

看到? 输入的预期大小为100 x 784

现在,我确实在训练中使用100作为批量大小,但在Estimator模型函数中我还指定了输入样本量的大小是可变的.所以我期待?x 784将在Tensorboard中显示.

input_layer = tf.reshape(features["x"], [-1, 28, 28, 1], name="input_layer")
Run Code Online (Sandbox Code Playgroud)

我尝试在具有不同批量大小的同一模型上使用estimator.train和estimator.evaluate方法(例如50),并使用Estimator.predict方法一次传递一个样本.在这些情况下,一切似乎都很好.

相反,如果我尝试使用模型而不通过Estimator接口,我确实会遇到问题.例如,如果我冻结我的模型并尝试在GraphDef中加载它并在会话中运行它,如下所示:

with tf.gfile.GFile("/path/to/my/frozen/model.pb", "rb") as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())

with tf.Graph().as_default() as graph:
    tf.import_graph_def(graph_def, name="prefix")

    x = graph.get_tensor_by_name('prefix/input_layer:0')
    y = graph.get_tensor_by_name('prefix/softmax_tensor:0')

    with tf.Session(graph=graph) as sess:
        y_out = sess.run(y, feed_dict={x: 28_x_28_image})
Run Code Online (Sandbox Code Playgroud)

我将得到以下错误:
ValueError:无法为Tensor'前缀/ input_layer:0'提供形状值(1,28,28,1),其形状为'(100,28,28,1)'

这让我很担心,因为在生产中我需要冻结,优化和转换我的模型以在TensorFlow Lite上运行它们.所以我不会使用Estimator接口.

我错过了什么?

python numpy mnist tensorflow tensorflow-estimator

6
推荐指数
1
解决办法
465
查看次数

`get_variable()`不识别tf.estimator的现有变量

这里有人提出这个问题,区别在于我的问题是关注的Estimator.

一些上下文:我们使用估计器训练了一个模型,并在Estimator中定义了一些变量input_fn,该函数将数据预处理到批处理.现在,我们正在进行预测.在预测期间,我们使用相同的input_fn方法读入和处理数据.但得到错误说变量(word_embeddings)不存在(变量存在于chkp图中),这里是相关的代码位input_fn:

with tf.variable_scope('vocabulary', reuse=tf.AUTO_REUSE):
    if mode == tf.estimator.ModeKeys.TRAIN:
        word_to_index, word_to_vec = load_embedding(graph_params["word_to_vec"])
        word_embeddings = tf.get_variable(initializer=tf.constant(word_to_vec, dtype=tf.float32),
                                          trainable=False,
                                          name="word_to_vec",
                                          dtype=tf.float32)
    else:
        word_embeddings = tf.get_variable("word_to_vec", dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)

基本上,当它处于预测模式时,else调用它来加载检查点中的变量.未能识别此变量表示a)范围的不当使用; b)图表未恢复.只要reuse设置得当,我认为范围不重要.

我怀疑这是因为图表尚未恢复input_fn阶段.通常,通过调用saver.restore(sess, "/tmp/model.ckpt") 引用来恢复图形.对估算器源代码的调查并没有得到任何与恢复有关的内容,最好的镜头是MonitoredSession,一个训练的包装器.它已经从最初的问题中伸展出来了,如果我走在正确的道路上,我就没有信心,如果有人有任何见解,我在这里寻求帮助.

我的问题的一行摘要:图表是如何在内部tf.estimator,通过input_fn或恢复的model_fn

tensorflow tensorflow-estimator

6
推荐指数
1
解决办法
224
查看次数

Tensorflow 2.0.beta 中带有 tf.estimator 模型的 tf.keras.optimizers.Adam 崩溃了

我使用Tensorflow 2.0.betaPython 3.6.6Mac OS(夜间:tf-nightly-2.0-preview 2.0.0.dev20190721但我从来没有设法把它与COMPAT模块的工作Tensorflow 2.0)。

我正在尝试将tf.estimator模型从Tensorflow 1.12(完全工作)迁移到Tensorflow 2.0. 这是代码:

# estimator model
def baseline_estimator_model(features, labels, mode, params):
    """
    Model function for Estimator
    """
    print('model based on keras layer but return an estimator model')

    # gettings the bulding blocks
    model = keras_building_blocks(params['dim_input'], params['num_classes'])

    dense_inpout = features['dense_input']

    # Logits layer
    if mode == tf.estimator.ModeKeys.TRAIN:
        logits = model(dense_inpout, training=True)
    else:
        logits = model(dense_inpout, training=False)


    # Compute …
Run Code Online (Sandbox Code Playgroud)

python-3.x google-cloud-platform keras tensorflow tensorflow-estimator

6
推荐指数
0
解决办法
730
查看次数

Tensorflow 2.0 - 大数据集的 tf.estimator.DNNClassifier 训练

我正在尝试训练 DNNClassifier

    labels = ['BENIGN', 'Syn', 'UDPLag', 'UDP', 'LDAP', 'MSSQL', 'NetBIOS', 'WebDDoS']

    # Build a DNN
    classifier = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[30, 10],
    n_classes=len(labels),
    label_vocabulary=labels)

    def input_fn(features, labels, training=True, batch_size=32):
       '''
       An input function for training or evaluating
       '''
       # Convert the inputs to a Dataset.
       dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
       # Shuffle and repeat if you are in training mode.
       if training:
          dataset = dataset.shuffle(1000).repeat()
       return dataset.batch(batch_size)

    # Train the model
    classifier.train(
    input_fn=lambda: input_fn(train_features, train_label, training=True),
    steps=5000)
Run Code Online (Sandbox Code Playgroud)

训练工作正常,直到使用更大的数据集

train_features.shape
>>> (15891114, …
Run Code Online (Sandbox Code Playgroud)

tensorflow tensorflow-datasets google-colaboratory tensorflow-estimator tensorflow2.0

6
推荐指数
1
解决办法
678
查看次数