我研究一个包含字段街的二进制分类问题。在第一步中,我使用了Tokenization来获取一个单词列表(一个单词在不同数据集中出现的频率)。然后,我使用这些信息在Dataframe中创建了两个列,描述了这个词及其使用频率:
def buildWeightList(indexes, tokenizer):
weights = []
for index in indexes:
if index == 0:
weights.append(0)
else:
weights.append(tokenizer.index_docs.get(index))
return weightsstreet_tokenized = ts.texts_to_sequences(data['STREETPRO'])
data['STREETPRO'] = tf.keras.preprocessing.sequence.pad_sequences(street_tokenized, maxlen=1)
data['STREETFREQ'] = buildWeightList(data['STREETPRO'], ts)在将Dataframe转换为TensorFlow数据集之后,我使用了以下代码将其添加到今后的列中:
vocabulary_list = np.arange(0, street_num_words + 1, 1).tolist()
street_voc = tf.feature_column.categorical_column_with_vocabulary_list(
key='STREETPRO', vocabulary_list=vocabulary_list, dtype=tf.dtypes.int64)
weighted_street = tf.feature_column.weighted_categorical_column(categorical_column=street_voc, weight_feature_key='STREETFREQ', dtype=tf.dtypes.int64)
street_one_hot = feature_column.indicator_column(weighted_street)
feature_columns.append(street_one_hot)如您所见,我使用了函数tf.feature_column.weighted_categorical_column.不幸的是,当我试图训练我的模型时,我得到了以下错误:
InvalidArgumentError: indices and values rows (indexing dimension) must match. (indices = 5, values = 1)
[[node sequential/dense_features_2/STREETPRO_weighted_by_STREETFREQ_indicator/SparseMerge/SparseReorder (defined at <ipython-input-40-964101dd1dc8>:3) ]] [Op:__inference_train_function_986]此外,我还收到以下警告:
WARNING:tensorflow:From ...\feature_column\feature_column_v2.py:4366: sparse_merge (from tensorflow.python.ops.sparse_ops) is deprecated and will be removed in a future version.现在我有两个问题:
First:在我描述的问题上使用这个函数有意义吗?不幸的是,我找不到这个函数如何工作的详细描述(只有这个简短的文档:https://www.tensorflow.org/api_docs/python/tf/feature_column/weighted_categorical_column)。
第二:如何修复所描述的错误?
发布于 2021-04-27 14:56:56
一年后,报告说我也有同样的问题,并通过消除任何零权重的例子来“解决”。可能是Tensorflow将某些内容转换为稀疏表示并省略零的问题。
https://stackoverflow.com/questions/61994285
复制相似问题