2

私は、TensorFlowディレクトリの例の後にモデル化されたディープニューラルネットワーク分類器を構築しようとしています。例のコードは、ここに示されています:私は私のアイリスデータと同じであるデータ、(連続特徴量と離散0または1のターゲットを使用してい除き、私はまったく同じことをやっているTensorFlow/Sklearnディープニューラルネットワーク分類器型エラー

def main(unused_argv): 
    # Load dataset. 
    iris = learn.datasets.load_dataset('iris') 
    x_train, x_test, y_train, y_test =  cross_validation.train_test_split(
     iris.data, iris.target, test_size=0.2, random_state=42) 

    # Build 3 layer DNN with 10, 20, 10 units respectively. 
    classifier = learn.DNNClassifier(hidden_units=[10, 20, 10], n_classes=3) 

    # Fit and predict. 
    classifier.fit(x_train, y_train, steps=200) 
    score = metrics.accuracy_score(y_test, classifier.predict(x_test)) 
    print('Accuracy: {0:f}'.format(score)) 

値)。私のデータのサンプルがここに示されています:

G1   G2   G3   G4  Target 
7.733347 6.933914 6.493334 5.31336   0 
6.555225 6.924448 6.353376 5.568334  1 
7.515558 6.326627 6.197123 5.565245  0 
7.132243 6.733111 7.107221 5.681575  1 

私は次のコードで私のデータを読んでいる:

def extract_examples_labels(filepath): 
    data = pd.read_csv(filepath).as_matrix() 
    num_inputs = len(data[0])-1 
    data_examples = data[:,range(num_inputs)] 
    data_labels= data[:,len(data[0])-1] 
    return data_examples, data_labels 

私はその後TensorFlowの例のように、まったく同じことを行うが、私は私を使用します代わりにデータ。しかし、私は次のようなエラーが表示され続けます:

ValueError:ターゲットのdtypeはint32、int64またはcompatibleである必要があります。代わりにDTYPEました:

y_train = y_train.astype(int) 

私はそののを確認します。だから私は、これは私のy_trainがfloatであることから、私はので、私はそう使用しないint型にキャストする必要があることを意味する「のfloat64」

を把握しますint64と入力して再度分類器を実行しますが、次のエラーが表示されます。

ValueError:ターゲットが特定の情報と互換性がありません。 TensorSignature(dtype = tf.float64、shape = TensorShape([Dimension(None)])、is_sparse = False)必要なシグネチャ:Tensor( "output:0"、shape =(?,)、dtype = int64) 。

今、float64が必要です。だから、私が間違っていることを混乱させる。任意の提案や明白な間違い?

+0

あなたの 'Target'カラムは' float'型として解釈されています。データ[['Target']] = data [['Target']] .statype(int)を使用して、int型として変換することができます。 –

+0

私はすでにそれを試みました。ご覧のとおり、y_trainは私のターゲットで、int型にキャストしますが、私は理解していない別のエラーが発生します。 –

答えて

2

少し掘った後、私は解決策を見つけました。あなたはTensorFlowパッケージの次のディレクトリに見れば:

tensorflow.contrib.learn.python.learn.datasets 

あなたはCSVファイルの読み込み機能を持っていbase.pyと呼ばれるファイルを見つけることができます。基本的には、load_csvという名前の関数を変更してファイルを取り込みました。コードは以下の通りです:あなたは上記のコードを見れば

Dataset = collections.namedtuple('Dataset', ['data', 'target']) 
Datasets = collections.namedtuple('Datasets', ['train', 'validation', 'test']) 

def load_csv(filename, target_dtype, target_column=-1, has_header=True): 
    """Load dataset from CSV file.""" 
    with gfile.Open(filename) as csv_file: 
    data_file = csv.reader(csv_file) 
    if has_header: 
     header = next(data_file) 
     n_samples = int(header[0]) 
     n_features = int(header[1]) 
     data = np.empty((n_samples, n_features)) 
     target = np.empty((n_samples,), dtype=np.int) 
     for i, ir in enumerate(data_file): 
      target[i] = np.asarray(ir.pop(target_column), dtype=target_dtype) 
      data[i] = np.asarray(ir, dtype=np.float64) 
    else: 
     data, target = [], [] 
     for ir in data_file: 
     target.append(ir.pop(target_column)) 
     data.append(ir) 
    return Dataset(data=data, target=target) 

だから、私は私が持っていた問題がtarget_dtype属性だと思います。ターゲット配列のdtypeを変更したにもかかわらず、target_dtype属性を変更しなかったため、TensorFlowがシグネチャをチェックしたときに互換性がないように見えました。私のコードは今動作する=。ご不明な点がございましたら、お気軽にお問い合わせください。

関連する問題