Tensorflow: невозможно получить элемент в байтах. во время обучения модели - PullRequest
0 голосов
/ 15 сентября 2018

Когда я запускаю свою классификационную модель, я получаю следующую ошибку.

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))

Получение pandas dataframe, состоящего из текста в виде списка слов и метки в виде целого числа. Я также получаю список уникальных слов в тексте.

С этими данными я приступаю к тренировкам. Сначала я создаю столбцы объектов:

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)

Так что я предполагаю, что это как-то связано с функцией ввода и данными, которые он передает в модель. Но я понятия не имею, что на самом деле не так.

Я попытался просмотреть соответствующий файл tenorflow, но там нет особого понимания. Это буквально просто функция чтения данных.

Кто-нибудь знает, какую ошибку я совершил?

...