如何将TensorFlow示例队列分成适当的批次进行培训?
我有一些图像和标签:
IMG_6642.JPG 1
IMG_6643.JPG 2
Run Code Online (Sandbox Code Playgroud)
(随意建议另一种标签格式;我想我可能需要另一个密集到稀疏的步骤......)
我已经阅读了不少教程,但还没有完全掌握.这就是我所拥有的,其中的注释表明了TensorFlow的阅读数据页面所需的步骤.
在示例队列之后,我需要将此队列分批进行培训; 那就是我被困的地方......
1.文件名列表
files = tf.train.match_filenames_once('*.JPG')
4.文件名队列
filename_queue = tf.train.string_input_producer(files, num_epochs=None, shuffle=True, seed=None, shared_name=None, name=None)
读者
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
6.解码器
record_defaults = [[""], [1]]
col1, col2 = tf.decode_csv(value, record_defaults=record_defaults)
(我认为我不需要下面的这一步,因为我已经将我的标签放在一个张量中,但我仍然包含它)
features = tf.pack([col2])
文档页面有一个运行一个图像的示例,而不是将图像和标签分成批次:
for i in range(1200):
# Retrieve a single instance:
example, label = sess.run([features, col5])
然后它下面有一个批处理部分:
def read_my_file_format(filename_queue):
reader = tf.SomeReader()
key, record_string = reader.read(filename_queue)
example, label = …Run Code Online (Sandbox Code Playgroud) 我正在使用Tensorflow中的LSTM-RNN训练一些音乐数据,并遇到了一些我不理解的GPU内存分配问题:我遇到一个OOM,而实际上似乎还有足够的VRAM可用.一些背景:我正在研究Ubuntu Gnome 16.04,使用的是GTX1060 6GB,Intel Xeon E3-1231V3和8GB RAM.所以现在首先是我能理解的错误消息的一部分,并且我将在最后为可能要求它提供帮助的任何人添加整个错误消息:
I tensorflow/core/common_runtime/bfc_allocator.cc:696] 8 Chunks of size 256 totalling 2.0KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 1 Chunks of size 1280 totalling 1.2KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 5 Chunks of size 44288 totalling 216.2KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 5 Chunks of size 56064 totalling 273.8KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 4 Chunks of size 154350080 totalling 588.80MiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 3 Chunks of size 813400064 totalling 2.27GiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 1 Chunks of size 1612612352 totalling 1.50GiB I tensorflow/core/common_runtime/bfc_allocator.cc:700] Sum Total of in-use chunks: 4.35GiB I tensorflow/core/common_runtime/bfc_allocator.cc:702] …
我是tensorflow和机器学习的新手.最近我正在研究一个模型.我的模型如下,
字符级嵌入向量 - >嵌入查找 - > LSTM1
字级嵌入矢量 - >嵌入查找 - > LSTM2
[LSTM1 + LSTM2] - >单层MLP-> softmax层
[LSTM1 + LSTM2] - >单层MLP-> WGAN鉴别器
他的模型代码
当我正在研究这个模型时,我得到了以下错误.我以为我的批次太大了.因此,我尝试将批量大小从20减少到10,但它不起作用.
ResourceExhaustedError(参见上面的回溯):OOM在分配张量形状时[24760,100] [[节点:字符/ bidirectional_rnn/bw/bw/while/bw/lstm_cell/split = Split [T = DT_FLOAT,num_split = 4,_device] ="/ job:localhost/replica:0/task:0/device:GPU:0"](gradients_2/Add_3/y,chars/bidirectional_rnn/bw/bw/while/bw/lstm_cell/BiasAdd)] [[Node :bi-lstm/bidirectional_rnn/bw/bw/stack/_167 = _Recvclient_terminated = false,recv_device ="/ job:localhost/replica:0/task:0/device:CPU:0",send_device ="/ job:localhost /副本:0 /任务:0 /设备:GPU:0",send_device_incarnation = 1,tensor_name ="edge_636_bi-lstm/bidirectional_rnn/bw/bw/stack",tensor_type = DT_INT32,_device ="/ job:localhost/replica:0 /任务:0 /装置:CPU:0" ]]
张量形状[24760,100]表示2476000*32/8*1024*1024 = 9.44519043 MB内存.我在Titan X(11 GB)GPU上运行代码.怎么可能出错?为什么会发生这种错误?
*额外信息*:LSTM1的大小为100.对于双向LSTM,它变为200.LSTM2的大小为300.对于双向LSTM,它变为600.
*注*:错误发生在32个纪元之后.我的问题是为什么在32个时代之后出现了错误.为什么不在最初的时代.