gpt4 book ai didi

python - 如何在 TensorFlow 中将字符串标签转换为单热向量?

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:24 25 4
gpt4 key购买 nike

我是 TensorFlow 的新手,想读取一个逗号分隔值 (csv) 文件,其中包含 2 列,第 1 列是索引,第 2 列是标签字符串。我有以下代码逐行读取 csv 文件中的行,我能够使用 print 语句正确获取 csv 文件中的数据。但是,我想从字符串标签进行一次性编码转换,而不是如何在 TensorFlow 中进行。最终目标是使用 tf.train.batch() 函数,这样我就可以获得一批 one-hot 标签向量来训练神经网络。

正如您在下面的代码中看到的,我可以在 TensorFlow session 中为每个标签条目手动创建一个单热向量。但是如何使用 tf.train.batch() 函数呢?如果我移动线

label_batch = tf.train.batch([col2], batch_size=5)

进入 TensorFlow session block (用 label_one_hot 替换 col2),程序 block 什么都不做。我试图将单热矢量转换移到 TensorFlow session 之外,但未能使其正常工作。正确的做法是什么?请帮忙。

label_files = []
label_files.append(LABEL_FILE)
print "label_files: ", label_files

filename_queue = tf.train.string_input_producer(label_files)

reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
print "key:", key, ", value:", value

record_defaults = [['default_id'], ['default_label']]
col1, col2 = tf.decode_csv(value, record_defaults=record_defaults)

num_lines = sum(1 for line in open(LABEL_FILE))

label_batch = tf.train.batch([col2], batch_size=5)

with tf.Session() as sess:
coordinator = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coordinator)

for i in range(100):
column1, column2 = sess.run([col1, col2])

index = 0
if column2 == 'airplane':
index = 0
elif column2 == 'automobile':
index = 1
elif column2 == 'bird':
index = 2
elif column2 == 'cat':
index = 3
elif column2 == 'deer':
index = 4
elif column2 == 'dog':
index = 5
elif column2 == 'frog':
index = 6
elif column2 == 'horse':
index = 7
elif column2 == 'ship':
index = 8
elif column2 == 'truck':
index = 9

label_one_hot = tf.one_hot([index], 10) # depth=10 for 10 categories
print "column1:", column1, ", column2:", column2
# print "onehot label:", sess.run([label_one_hot])

print sess.run(label_batch)

coordinator.request_stop()
coordinator.join(threads)

最佳答案

问这个问题已经 2 年多了,但这个答案对某些人来说可能仍然相关。这是将字符串标签转换为 TF 中的单热向量的一种简单方法:

import tensorflow as tf

vocab = ['a', 'b', 'c']

input = tf.placeholder(dtype=tf.string, shape=(None,))
matches = tf.stack([tf.equal(input, s) for s in vocab], axis=-1)
onehot = tf.cast(matches, tf.float32)

with tf.Session() as sess:
out = sess.run(onehot, feed_dict={input: ['c', 'a']})
print(out) # prints [[0. 0. 1.]
# [1. 0. 0.]]

关于python - 如何在 TensorFlow 中将字符串标签转换为单热向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43602783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com