现在我使用以下功能进行改组
from tensorflow.contrib import data
def input_pipeline(filenames, batch_size):
# Define a `tf.contrib.data.Dataset` for iterating over one epoch of the data.
dataset = data.TextLineDataset(filenames)
dataset = dataset.map(decode_func)
dataset = dataset.shuffle(buffer_size=10000) # Equivalent to min_after_dequeue=10000.
dataset = dataset.batch(batch_size)
# Return an *initializable* iterator over the dataset, which will allow us to
# re-initialize it at the beginning of each epoch.
return dataset.make_initializable_iterator()
Run Code Online (Sandbox Code Playgroud)
但它只是按数量调整数据,buffer_size它将填写buffer订单.
我的数据非常庞大,我无法设置buffer_size得太大.有没有其他解决方案可以改组整个数据集?
例如,我有DataFrame A如下
A
0
1
2
Run Code Online (Sandbox Code Playgroud)
现在我想在每2行插入DataFrame B到A每1行B是如下
B
3
3
4
4
5
5
Run Code Online (Sandbox Code Playgroud)
最后我想要
A
0
3
3
1
4
4
2
5
5
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
当我想用于tf.train.string_input_producer加载2个时期的数据时,我使用了
filename_queue = tf.train.string_input_producer(filenames=['data.csv'], num_epochs=2, shuffle=True)
col1_batch, col2_batch, col3_batch = tf.train.shuffle_batch([col1, col2, col3], batch_size=batch_size, capacity=capacity,\min_after_dequeue=min_after_dequeue, allow_smaller_final_batch=True)
Run Code Online (Sandbox Code Playgroud)
但后来我发现这个操作并没有产生我想要的东西.
它只能生成每个样品data.csv2次,但生成的顺序不清楚.例如,3行数据data.csv
[[1]
[2]
[3]]
Run Code Online (Sandbox Code Playgroud)
它会产生(每个样品只出现2次,但顺序是可选的)
[1]
[1]
[3]
[2]
[2]
[3]
Run Code Online (Sandbox Code Playgroud)
但我想要的是(每个时代都是分开的,在每个时代都是洗牌)
(epoch 1:)
[1]
[2]
[3]
(epoch 2:)
[1]
[3]
[2]
Run Code Online (Sandbox Code Playgroud)
另外,如何知道1个纪元何时完成?有一些标志变量吗?谢谢!
我的代码在这里.
import tensorflow as tf
def read_my_file_format(filename_queue):
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
record_defaults = [['1'], ['1'], ['1']]
col1, col2, col3 = tf.decode_csv(value, record_defaults=record_defaults, field_delim='-')
# col1 = list(map(int, col1.split(',')))
# col2 = list(map(int, …Run Code Online (Sandbox Code Playgroud) 如何在列元素列表时将列转换为非嵌套列表?
例如,列就像
column
[1, 2, 3]
[1, 2]
Run Code Online (Sandbox Code Playgroud)
我想要最后关注.
[1,2,3,1,2]
Run Code Online (Sandbox Code Playgroud)
但现在column.tolist(),我会得到
[[1,2,3],[1,2]]
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢你的帮助.我的目的是找到最简单(优雅)和有效的方法来做到这一点.现在我使用@jezrael方法.
from itertools import chain
output = list(chain.from_iterable(df[column])
Run Code Online (Sandbox Code Playgroud)
最简单的方法是由@piRSquared提供的,但可能更慢.
output = df[column].values.sum()
Run Code Online (Sandbox Code Playgroud)