2

TensorFlow 디렉토리의 예를 모델로하여 Deep Neural Network 분류기를 작성하려고합니다. 예제의 코드는 여기에 표시됩니다 : 내 홍채 데이터와 동일한 데이터 (연속 기능 값과 이산 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 또는 호환 가능해야합니다.

y_train = y_train.astype(int) 

가 나는 그것의 확인 : 그래서이 내 y_train가 부동이기 때문에, 나는 내가 그렇게 사용합니까 int로 캐스팅해야한다는 것을 의미 파악 'float64'

대신 DTYPE있어 int64를 입력하고 분류자를 다시 실행하지만 다음 오류가 발생합니다.

ValueError : 대상이 주어진 정보와 호환되지 않습니다. TensorSignature (dtype = tf.float64, shape = TensorShape ([차원 (없음)]), is_sparse = False) 필요한 대상 : Tensor (출력 : 0, 모양 = (?,), dtype = int64) .

이제 float64가 필요하다고 말합니다. 그래서 내가 뭘 잘못하고 있는지 혼란스러워. 어떤 제안이나 명백한 실수?

+0

'Target'열이 'float'유형으로 해석됩니다. 데이터 [[ 'Target']] = 데이터 [[ '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가 서명을 검사 할 때 호환되지 않는 것처럼 보였습니다. 내 코드는 이제 작동합니다. 궁금한 점이 있거나 더 명확히 할 수 있으면 언제든지 알려주세요.