运行分类模型时,出现以下错误。
tensorflow.python.framework.errors_impl.InternalError: Unable to get element as bytes.
代码本身主要是样板内容,我正在自己的数据集上运行Bag-Of-Words分类。首先,我使用以下命令处理csv文件中的数据:
def import_data(data_path):
data = pd.read_csv(data_path,encoding = 'utf-8')
data.drop('alert_number', axis=1, inplace=True)
data.drop('defect_desc', axis=1, inplace=True)
def to_series(cell):
#First we get rid of special chars
cell = re.sub(r'[\.\,\'\"\?\!\)\(]','',cell)
# get everythin in lowercase
cell = cell.lower()
#and split to list
cell = cell.split(' ')
return pd.Series(cell)
data['risk_desc'] = data['risk_desc'].map(to_series)
word_list = []
for element in data['risk_desc']:
word_list.extend(element)
risk_types = list(set([element.split(',')[0] for element in
pd.unique(data['risk_type'])]))
label_dictionary = dict((element,i) for i, element in
enumerate(risk_types))
data['risk_type'] = data['risk_type'].map(lambda element:label_dictionary[element.split(',')[0]])
return data, list(set(word_list))
获取由文本作为单词列表和标签作为整数组成的熊猫数据框。我还获得了文本中唯一词的列表。
有了这些数据,我便开始进行训练。 首先,我创建功能列:
def construct_feature_columns():
columns = []
categorical_column_names = []
numerical_column_names = []
for column in data.columns:
if(data[column].dtype == np.float64 or data[column].dtype == np.int64 or data[column].dtype == np.uint8):
numerical_column_names.append(column)
else:
categorical_column_names.append(column)
columns = [tf.feature_column.numeric_column(k) for k in numerical_column_names]
for column in categorical_column_names:
columns.append(tf.feature_column.embedding_column(tf.feature_column.categorical_column_with_vocabulary_list(column,vocabulary_list = vocabulary),dimension=8))
return columns
和输入功能:
def input_fn_constructor(data):
#even_data = pd.DataFrame()
even_data = data.sample(frac=1)
training_data = even_data.iloc[int(len(even_data)/4):]
testing_data = even_data.iloc[0:int(len(even_data)/4)]
training_labels = training_data['risk_type'].to_frame()
testing_labels = testing_data['risk_type'].to_frame()
training_input_fn = tf.estimator.inputs.pandas_input_fn(training_data, training_data['risk_type'], num_epochs=None, shuffle=True)
testing_input_fn = tf.estimator.inputs.pandas_input_fn(testing_data, testing_data['risk_type'], shuffle=True)
return training_input_fn, testing_input_fn
最后,我启动模型并开始训练,其中大部分还是教程中的样板内容,只是针对稍有不同的任务进行了调整。
optimizer = tf.train.AdamOptimizer()
model = tf.estimator.DNNClassifier(feature_columns=construct_feature_columns(),
hidden_units = [500,200],
n_classes=9,
model_dir='./model/',
optimizer = optimizer)
average_losses = []
for i in range(0, epochs):
model.train(input_fn=training_input_fn, steps=10)
evaluation = model.evaluate(input_fn=testing_input_fn, steps=10)
print(evaluation)
average_losses.append(evaluation['average_loss'])
我在这一行遇到了例外:
model.train(input_fn=training_input_fn, steps=10)
因此,我认为它与输入功能及其输入到模型的数据有关。但是我不知道实际上是什么错。
我尝试研究相关的tensorflow文件,但是在这里没有太多的见识。它实际上只是读取数据的功能。
有人知道我犯了什么样的错误吗?