首页 文章

Tensorflow纤薄如何在训练期间指定批量大小

提问于
浏览
2

我正在尝试使用纤薄的界面来创建和训练卷积神经网络,但我无法弄清楚如何指定训练的批量大小 . 在训练期间,由于我的显卡上的“Out of Memory”,我的网络崩溃了 . 所以我认为应该是一种处理这种情况的方法......我是否必须分批分割数据和标签,然后显式循环或slim.learning.train正在处理它?在代码中我粘贴train_data是我的训练集(numpy数组)中的所有数据..并且模型定义不包含在这里我有一个快速循环到源但到目前为止没有运气...

g = tf.Graph()
    with g.as_default():
        # Set up the data loading:
        images = train_data
        labels = tf.contrib.layers.one_hot_encoding(labels=train_labels, num_classes=num_classes)
        # Define the model:
        predictions = model7_2(images, num_classes, is_training=True)

        # Specify the loss function:
        slim.losses.softmax_cross_entropy(predictions, labels)

        total_loss = slim.losses.get_total_loss()
        tf.scalar_summary('losses/total loss', total_loss)

        # Specify the optimization scheme:
        optimizer = tf.train.GradientDescentOptimizer(learning_rate=.001)
        train_tensor = slim.learning.create_train_op(total_loss, optimizer)

        slim.learning.train(train_tensor,
            train_log_dir,
            number_of_steps=1000,
            save_summaries_secs=300,
            save_interval_secs=600)

任何提示建议?

编辑:我重新阅读文档......我找到了这个例子

image, label = MyPascalVocDataLoader(...)
images, labels = tf.train.batch([image, label], batch_size=32)

但是目前还不清楚如何将图像和标签传递给tf.train.batch ...因为没有指定MyPascalVocDataLoader函数...在我的情况下,我的数据集是从sqlite数据库加载的,我有训练数据和标签为numpy数组....仍然困惑 . 当然我试图将我的numpy数组(转换为常数张量)传递给tf.train.batch,就像这样

image = tf.constant(train_data)
    label = tf.contrib.layers.one_hot_encoding(labels=train_labels, num_classes=num_classes)
    images, labels = tf.train.batch([image, label], batch_size=32)

但似乎不是正确的路径......似乎train.batch只需要我的数据集中的一个元素......(如何传递这个?我只传递train_data [0]并没有意义train_labels [0])

1 回答

  • 0

    在这里,您可以创建tfrecords,这是tensorflow使用的特殊类型的二进制文件格式 . 如您所述,您有训练图像和标签,您可以轻松创建TFrecords进行培训和验证 .

    创建TFrecords之后,您需要的只是解码来自编码的TFrecords的图像并将其提供给您的模型输入 . 在那里,您可以选择批量大小和所有 .

相关问题