gpt4 book ai didi

python - tensorflow 中的分类器根据标签大小返回错误

转载 作者:行者123 更新时间:2023-12-01 01:00:05 24 4
gpt4 key购买 nike

我有一个由两列组成的数据库,我想使用第一列来获取第二列。第一个大约有 3000 个元素,第二个正好有 151 个元素。为此,我在 tensorflow 中生成了一个密集的神经网络。但是,我在训练过程中遇到了一个奇怪的错误。

这是我生成的代码

import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split

df = pd.read_excel('nn.xlsx')
x_data = df.drop('NCM',axis=1)

lista = df['NCM'].values.tolist()
prods = df['PRODUTO'].values.tolist()

seen = set()
ncm = [x for x in lista if x not in seen and not seen.add(x)]

seen = set()
prods = [x for x in prods if x not in seen and not seen.add(x)]

assigned = tf.feature_column.categorical_column_with_vocabulary_list('PRODUTO',prods)
feat_cols = [assigned]
labels = df['NCM']
X_train, X_test, y_train, y_test = train_test_split(x_data, labels, test_size=0.33, random_state=101)
input_func = tf.estimator.inputs.pandas_input_fn(x=X_train,y=y_train,batch_size=10,num_epochs=1000,shuffle=True)

input_func = tf.estimator.inputs.pandas_input_fn(x=X_train,y=y_train,batch_size=10,num_epochs=1000,shuffle=True)
embedded_group_col = tf.feature_column.embedding_column(assigned,dimension=len(prods))

feat_cols = [embedded_group_col]

dnn_model = tf.estimator.DNNClassifier(hidden_units = [10,10,10],feature_columns=feat_cols,n_classes=len(ncm))
dnn_model.train(input_fn=input_func,steps = 1000)

代码运行良好,直到最后一行,它给出了错误:

InvalidArgumentError (see above for traceback): assertion failed: [Labels must <= n_classes - 1] [Condition x <= y did not hold element-wise:x (dnn/head/labels:0) = ] [[22030000][22030000][22030000]...] [y (dnn/head/assert_range/Const:0) = ] [151]

这很奇怪,因为我保证类的数量与 len(ncm) 完全相同。

什么可能导致此错误?

最佳答案

仅仅使类的数量与len(ncm)相同是不够的。您必须确保目标标签 ID(y_trainy_test)仅包含 0 到 150 之间的整数(因为您的类数为 151)。

您可能想做一些与您的特征类似的事情 - 使用分类特征转换器将任何标签 id 映射到 0 到 150(含)之间的整数。

例如,您可以尝试以下操作:

mapping_strings = tf.constant(['904060','21069090',...,'99998771'])
table = tf.contrib.lookup.index_table_from_tensor(
mapping=mapping_strings, num_oov_buckets=0)
label_ids = table.lookup(labels)

请注意,在学习了分类器之后,要将类 ID 解码为类字符串(反向映射),您可以使用 tf.contrib.lookup.index_to_string_table_from_tensor .

关于python - tensorflow 中的分类器根据标签大小返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876316/

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