将Pandas/List/Array的组合转换为Tensorflow可以接受的内容



我正在使用它将一些数据读取到字符级一级热编码中。这有点低效,但这是演示代码,所以清晰度比性能更重要:

import tensorflow as tf
sess = tf.Session()
def onehot(str):
chars = list(map(lambda c: max(0, ord(c) - 48), list(str)))
twoDim = sess.run(tf.one_hot(chars, 122 - 48))
# flatten the 2D array:
return [item for sublist in twoDim for item in sublist]
import pandas
df = pandas.read_csv(sys.argv[1])
train_inputs = df['input'].map(onehot).values
train_labels = df['output'].map(onehot).values

生成的阵列打印为[list([0.0, 0.0, 0.0, 0.0, ...

在代码的后面,我将这些数组输入到TF成本优化函数中:

_,cost = sess.run(train_step, feed_dict={x: train_inputs, y_: train_labels})

我在哪里得到这个错误:

ValueError: setting an array element with a sequence.

坦率地说,我对Python对类似数组的数据结构的表示,列表、数组、ndarray、numpy数组、pandas数据帧等之间的细微差别感到困惑,我不明白我缺少了什么。

如何将train_*变量转换为Tensorflow可以接受的类似数组的结构?

请随时用一份清单来回答,这可能会在未来帮助其他人,或者用一个简单的答案来修复我的代码。

样本数据

以下是我的输入csv文件:

input,output
abc,def
ghi,jkl
123,456

添加对.tolist()的调用足以使Tensorflow接受数据:

train_inputs = df['input'].map(onehot).values.tolist()
train_labels = df['output'].map(onehot).values.tolist()

Tensorflow喜欢原生数组(使用方括号表示(,tolist()输出原生数组,至少在本用例中,原生数组与list()无法区分。

最新更新