我有一个 tfrecords
tệp mà tôi muốn tạo dữ liệu hàng loạt. Tôi đang sử dụng tf.train.shuffle_batch() để tạo một lô. Trong quá trình đào tạo của mình, tôi muốn gọi các đợt và chuyển chúng. Đây là nơi tôi bị mắc kẹt. Tôi đã đọc,TFRecordReader()
Vị trí được lưu ở trạng thái của biểu đồ và ví dụ tiếp theo được đọc từ vị trí tiếp theo. Vấn đề là tôi không biết cách tải đợt tiếp theo. Tôi sử dụng mã bên dưới để tạo lô.
def read_and_decode_single_example(tên tệp):
tên tệp_queue = tf.train.string_input_producer([tên tệp], num_epochs=1)
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
tính năng = tf.parse_single_example(
serialized_example,
tính năng={
'ngữ cảnh': tf.FixedLenFeature([160], tf.int64),
'context_len': tf.FixedLenFeature([1], tf.int64),
'lời nói': tf.FixedLenFeature([160], tf.int64),
'utterance_len': tf.FixedLenFeature([1], tf.int64),
'nhãn': tf.FixedLenFeature([1], tf.int64)
})
bối cảnh = tính năng['bối cảnh']
context_lens = tính năng['context_len']
cách nói = tính năng['lời nói']
cách nói_lens = tính năng['utterance_len']
nhãn = tính năng['nhãn']
trả về ngữ cảnh, context_lens, cách nói, cách nói_lens, nhãn
ngữ cảnh, context_lens, cách nói, cách nói_lens, nhãn = \
read_and_decode_single_example('data/train.tfrecords')
bối cảnh_batch, bối cảnh_lens_batch, \
cách nói_batch, cách nói_lens_batch, \
nhãn_batch = tf.train.shuffle_batch([ngữ cảnh, bối cảnh_lens, cách nói,
cách nói_lens, nhãn],
batch_size=kích thước lô,
dung lượng=3*bat_size,
min_after_dequeue=batch_size)
Điều này mang lại cho tôi một loạt dữ liệu. Tôi muốn sử dụng mô hình Feed_dict để vượt qua các đợt đào tạo, trong đó một đợt mới được chuyển qua mỗi lần lặp. Làm thế nào để tải các lô này? gọi đọc_và_giải mã
Và tf.train.shuffle_batch
Đợt tiếp theo có được gọi lại không?
read_and_decode_single_example()
Hàm tạo biểu đồ (phụ) cho mạng được sử dụng để tải dữ liệu; bạn chỉ gọi nó một lần. nó có thể được gọi thích hợp hơn build_read_and_decode_single_example_graph()
, nhưng hơi dài.
"Điều kỳ diệu" nằm ở nhiều đánh giá (tức là sử dụng_đợt
Tenor chẳng hạn
batch_size = 100
# ...
với tf.Session() là sess:
#nhận lô 100 giá trị đầu tiên
first_batch = sess.run([contexts_batch, context_lens_batch,
cách nói_batch, cách nói_lens_batch,
nhãn_batch])
# lô thứ hai gồm 100 giá trị khác nhau
giây_batch = sess.run([contexts_batch, context_lens_batch,
cách nói_batch, cách nói_lens_batch,
nhãn_batch])
# vân vân.
Tất nhiên, thay vì nhận các giá trị này từ phiên theo cách thủ công, bạn có thể cung cấp chúng cho các phần khác của mạng. Cơ chế này giống nhau: bất cứ khi nào bạn nhận được một trong các tensor này một cách trực tiếp hoặc gián tiếp, cơ chế tạo khối sẽ chịu trách nhiệm cung cấp cho bạn một lô mới (có giá trị khác nhau) mỗi lần.
Tôi là một lập trình viên xuất sắc, rất giỏi!