【发布时间】:2023-04-11 05:16:01
【问题描述】:
我的 TF api tf.data.Dataset.from_tensor_slices() 有问题
下面的代码运行良好:
features = {'letter': [['A','A'], ['C','D'], ['E','F'], ['G','A'], ['X','R']]}
letter_feature = tf.feature_column.categorical_column_with_vocabulary_list(
"letter", ["A", "B", "C"], dtype=tf.string)
target = [1,0,1,0,1]
indicator = tf.feature_column.indicator_column(letter_feature)
def make_input_fn (X,y):
def input_fn():
return (X,y)
return input_fn
# THE INPUT FUNCTION WILL RETURN A SET : ( {'letter':[['A','A'],['C','D']...]}, [1,0,...] )
linear_estimator = tf.estimator.LinearClassifier(indicator)
input_fn = make_input_fn(features, target)
linear_estimator.train(input_fn)
这基本上允许我使用指标 feature_column 将形状 (-1,2) 的列提供给我的估计器模型。
现在我对以下用例有疑问:
df_features = pd.DataFrame.from_dict(features)
######### this is the dataframe features####
#letter
#[A, A, A]
#[B, C, D]
#[B, E, F]
#[B, G, A]
#[B, X, R]
def make_input_fn (X,y):
def input_fn():
ds = tf.data.Dataset.from_tensor_slices((dict(X),y))
ds = ds.shuffle(128)
return ds
return input_fn
linear_estimator = tf.estimator.LinearClassifier(indicator)
input_fn = make_input_fn(df_features,target)
linear_estimator.train(input_fn)
我最终得到了这个错误:
TypeError: Could not build a TypeSpec for 0 [A, A, A]
1 [B, C, D]
2 [B, E, F]
3 [B, G, A]
4 [B, X, R]
Name: letter, dtype: object with type Series ...
TypeError: Expected binary or unicode string, got ['A', 'A', 'A']
这真的很烦人,因为如果我有大型数据集,我将需要使用 tf.data.Dataset api 为我的估算器提供小批量训练并最终分发训练过程。
我需要一个解决方法来解决这个问题,我考虑过生成器,但我不确定如何实现它,但我想确定是否没有任何其他解决方案
谢谢!
【问题讨论】:
-
你找到解决方案了吗?
-
我想我可能误解了你的代码......所以一个输入样本可能是 ['A', 'A'],它的标签不知何故是 1,对吧?那么,为什么对于 ['E', 'F'],标签仍然是 1?...我设法通过三个修改使代码运行: 1.
tf.data.Dataset.from_tensor_slices((dict(X), tf.one_hot(y, depth=2))); 2.input_fn = make_input_fn(features,target); 3.linear_estimator.train(input_fn, steps=2)。如果这些更改没有意义,请解释一下功能和目标的含义。
标签: tensorflow tensorflow-datasets tensorflow-estimator