首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Apllying TypeError:必须是字符串,而不是整型

Apllying TypeError:必须是字符串,而不是整型
EN

Stack Overflow用户
提问于 2018-02-13 03:05:32
回答 1查看 1.3K关注 0票数 1

我正在尝试使用我的数据集重新生成tensorflow教程代码,该数据集是一维Tensorflow N_of_samples=4500,它以Matlab文件的形式存在。应用此代码后,我得到了错误。我正在寻找解决此问题的任何建议,谢谢。问题主要存在于训练分类器中。

训练模型。classifier.train

代码语言:javascript
复制
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import argparse
import tensorflow as tf
import scipy.io
import pandas as pd
import tensorflow as tf
import numpy as np

file = "train.mat"
myfile1 = scipy.io.loadmat(file)
train=myfile1['train']
file = "test.mat"
myfile1 = scipy.io.loadmat(file)
test=myfile1['test']

train_np = np.asarray(train, np.float32)
test_np = np.asarray(test, np.float32)
test_np
n = train_np.shape[0]
p = train_np.shape[1]

train = dict(enumerate(train_np, 1))
test = dict(enumerate(test_np, 1))
train=pd.DataFrame.from_dict(train,orient='index')
test=pd.DataFrame.from_dict(test,orient='index')


def load_data(y_name=p-1):
    train_x, train_y = train, train.pop(y_name)
    test_x, test_y = test, test.pop(y_name)
    train_y=train_y.astype(np.int64)
    test_y = test_y.astype(np.int64)

    return (train_x, train_y), (test_x, test_y)


def train_input_fn(features, labels, batch_size):
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
    dataset = dataset.shuffle(1000).repeat().batch(batch_size)
    return dataset


def eval_input_fn(features, labels, batch_size):
    features=dict(features)
    if labels is None:
        # No labels, use only features.
        inputs = features
    else:
        inputs = (features, labels)

    # Convert the inputs to a Dataset.
    dataset = tf.data.Dataset.from_tensor_slices(inputs)

    # Batch the examples
    assert batch_size is not None, "batch_size must not be None"
    dataset = dataset.batch(batch_size)

    # Return the dataset.
    return dataset

parser = argparse.ArgumentParser()
parser.add_argument('--batch_size', default=100, type=int, help='batch size')
parser.add_argument('--train_steps', default=1000, type=int,
                help='number of training steps')

def main(argv):
    args = parser.parse_args(argv[1:])
    (train_x, train_y), (test_x, test_y) = load_data()

    # Feature columns describe how to use the input.
    my_feature_columns = []
    for key in train_x.keys():
        my_feature_columns.append(tf.feature_column.numeric_column(key=key))

    # Build 2 hidden layer DNN with 10, 10 units respectively.
    classifier = tf.estimator.DNNClassifier(
        feature_columns=my_feature_columns,
        # Two hidden layers of 10 nodes each.
        hidden_units=[10, 10],
        # The model must choose between 2 classes.
        n_classes=2)

    # Train the Model.
    classifier.train(
            input_fn=lambda:train_input_fn(train_x, train_y,
                                             args.batch_size),
        steps=args.train_steps)

    # Evaluate the model.
    eval_result = classifier.evaluate(
        input_fn=lambda:eval_input_fn(test_x, test_y,
                                            args.batch_size))

    print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))


if __name__ == '__main__':
    tf.logging.set_verbosity(tf.logging.INFO)
    tf.app.run(main)

我得到了这个错误

代码语言:javascript
复制
File "C:/Users/77781455/AppData/Local/Programs/Python/Python36/Scripts/models/samples /core/get_started/update_pre.py", line 138, in <module>
    tf.app.run(main)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\platform\app.py", line 124, in run
_sys.exit(main(argv))
  File         "C:/Users/77781455/AppData/Local/Programs/Python/Python36/Scripts/models/samples/core/get_started/update_pre.py", line 124, in main
steps=args.train_steps)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\estimator.py", line 314, in train
loss = self._train_model(input_fn, hooks, saving_listeners)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\estimator.py", line 743, in _train_model
features, labels, model_fn_lib.ModeKeys.TRAIN, self.config)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\estimator.py", line 725, in _call_model_fn
model_fn_results = self._model_fn(features=features, **kwargs)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\canned\dnn.py", line 324, in _model_fn
config=config)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\canned\dnn.py", line 176, in _dnn_model_fn
logits = logit_fn(features=features, mode=mode)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\estimator\canned\dnn.py", line 90, in dnn_logit_fn
features=features, feature_columns=feature_columns)
File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\feature_column\feature_column.py", line 280, in input_layer
trainable, cols_to_vars)
File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\feature_column\feature_column.py", line 193, in _internal_input_layer
None, default_name=column._var_scope_name):  # pylint: disable=protected-access
File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\variable_scope.py", line 1929, in __enter__
unique_default_name = _get_unique_variable_scope(self._default_name)
  File "C:\Users\77781455\AppData\Local\Programs\Python\Python36\lib\site-            packages\tensorflow\python\ops\variable_scope.py", line 1656, in _get_unique_variable_scope
    name = current_scope.name + "/" + prefix if current_scope.name else prefix
TypeError: must be str, not int
EN

回答 1

Stack Overflow用户

发布于 2018-06-05 05:26:24

对我来说,这个问题的答案是将列名设置为字符串,因为它们默认为整数:

代码语言:javascript
复制
df.columns = df.columns.astype(str)

这里讨论了这个问题:Tensorflow TypeError: Can't convert 'numpy.int64' object to str implicitly

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48753714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档