2017-12-18 15 views
0

Tensorflowを初めて使用し、60列の.csvファイルでニューラルネットワークを実行しようとしています。しかし、その中には文字列フィールドが含まれています。私はプログラムを実行しようとしましたcould not convert string to float:これはコードです。TensorFlow - 文字列フィールドの操作

# Load datasets. 
    training_set = tf.contrib.learn.datasets.base.load_csv_without_header(
     filename=TRAINING, 
     target_dtype=np.int, 
     features_dtype=np.float32) 

    test_set = tf.contrib.learn.datasets.base.load_csv_without_header(
     filename=TEST, 
     target_dtype=np.int, 
     features_dtype=np.float32) 

    # Specify that all features have real-value data 
    feature_columns = [tf.feature_column.numeric_column("x", shape=[59])] 


    classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns, 
              hidden_units=[59], 
              n_classes=2) 

ここで、target_dtypeとfeatures_dtypeはnumpyの型を取ります。ここではhttps://docs.scipy.org/doc/numpy/user/basics.types.htmlを検索し、文字列フィールドがないように見えます。 これを達成する最も良い方法は何ですか?

答えて

1

2つの方法があります。

最初に、csvでデータを変更して、 'float'に変換できない文字列を削除することができます。 tf.estimator Quickstartでデモコードを使用するには、iris_training.csvまたはiris_test.csvのようなCSV形式を維持する必要があります。

第2に、呼び出された関数load_csv_without_headerのコードを変更することができます。このようなオリジナルコード:ここで

def load_csv_without_header(filename, 
         target_dtype, 
         features_dtype, 
         target_column=-1): 
    """Load dataset from CSV file without a header row.""" 
    with gfile.Open(filename) as csv_file: 
    data_file = csv.reader(csv_file) 
    data, target = [], [] 
    for row in data_file: 
     target.append(row.pop(target_column)) 
     data.append(np.asarray(row, dtype=features_dtype)) 

    target = np.array(target, dtype=target_dtype) 
    data = np.array(data) 
    return Dataset(data=data, target=target) 

は、それがsucnなGFILEとして、CSV、numpyの、コレクション、パイソンの特徴を、次のような、列挙、tensorflow内の関数として、いくつかの共通のモジュールを使用しています。このコードをデバッグし、データのコードを変更することができます。

また、tf.decode_csvを使用することもできます。

最後に、テンソルフローにようこそ。