2014-12-22 5 views
3

pylearn2에 사용자 지정 데이터 집합을로드하는 동안 문제가 발생합니다. 나는 작은 XOR 데이터 세트를 사용하여 훈련시키기 위해 간단한 MLP를 얻으려고 노력하고있다. 나는 pylearn2의 train.py 스크립트와 같은 디렉토리에 있지 않은 yaml 파일과 동일한 디렉토리에 xor.csv이라는 데이터 세트를 가지고 있습니다.pylearn2 CSVDataset TypeError

여기 xor.csv의 전체 내용이다 : 나는 pylearn2의 train.py 스크립트를 실행하면 컴파일하는 동안

!obj:pylearn2.train.Train { 
    dataset: &train !obj:pylearn2.datasets.csv_dataset.CSVDataset { 
     path: 'xor.csv', 
     task: 'classification' 
    }, 
    model: !obj:pylearn2.models.mlp.MLP { 
     layers: [ 
       !obj:pylearn2.models.mlp.Sigmoid { 
        layer_name: 'h0', 
        dim: 10, 
        irange: 0.05, 
       }, 

       !obj:pylearn2.models.mlp.Softmax { 
        layer_name: 'y', 
        n_classes: 1, 
        irange: 0. 
       } 
       ], 
     nvis: 2, 
    }, 
    algorithm: !obj:pylearn2.training_algorithms.sgd.SGD { 
     learning_rate: 1e-2, 
     batch_size: 1, 
     monitoring_dataset: 
      { 
       'train' : *train 
      }, 
     termination_criterion: 
       !obj:pylearn2.termination_criteria.EpochCounter { 
        max_epochs: 10000 
       }, 
    }, 
    extensions: [ 
     !obj:pylearn2.train_extensions.best_params.MonitorBasedSaveBest { 
      channel_name: 'valid_y_misclass', 
      save_path: "best.pkl" 
     }, 
    ] 
} 

, 그것은 (아마도 훈련 전에 실패

여기
label,x,y 
0,0,0 
1,0,1 
1,1,0 
0,1,1 

내 YAML 파일의 전체 내용입니다 theano 기능). 출력의 전체 내용은 다음과 같습니다.

[COMPUTER_NAME]:some_folder [MY_NAME]$ python [PATH_TO_PYLEARN2_SCRIPTS]/train.py example_mlp.yml 
/Users/[MY_NAME]/anaconda/lib/python2.7/site-packages/nose/plugins/manager.py:418: UserWarning: Module argparse was already imported from /Users/[MY_NAME]/anaconda/lib/python2.7/argparse.pyc, but /Users/[MY_NAME]/anaconda/lib/python2.7/site-packages is being added to sys.path 
    import pkg_resources 
Parameter and initial learning rate summary: 
    h0_W: 0.01 
    h0_b: 0.01 
    softmax_b: 0.01 
    softmax_W: 0.01 
Compiling sgd_update... 
Compiling sgd_update done. Time elapsed: 1.109511 seconds 
compiling begin_record_entry... 
compiling begin_record_entry done. Time elapsed: 0.090133 seconds 
Monitored channels: 
    learning_rate 
    total_seconds_last_epoch 
    train_h0_col_norms_max 
    train_h0_col_norms_mean 
    train_h0_col_norms_min 
    train_h0_max_x_max_u 
    train_h0_max_x_mean_u 
    train_h0_max_x_min_u 
    train_h0_mean_x_max_u 
    train_h0_mean_x_mean_u 
    train_h0_mean_x_min_u 
    train_h0_min_x_max_u 
    train_h0_min_x_mean_u 
    train_h0_min_x_min_u 
    train_h0_range_x_max_u 
    train_h0_range_x_mean_u 
    train_h0_range_x_min_u 
    train_h0_row_norms_max 
    train_h0_row_norms_mean 
    train_h0_row_norms_min 
    train_objective 
    train_y_col_norms_max 
    train_y_col_norms_mean 
    train_y_col_norms_min 
    train_y_max_max_class 
    train_y_mean_max_class 
    train_y_min_max_class 
    train_y_misclass 
    train_y_nll 
    train_y_row_norms_max 
    train_y_row_norms_mean 
    train_y_row_norms_min 
    training_seconds_this_epoch 
Compiling accum... 
graph size: 115 
Compiling accum done. Time elapsed: 1.647879 seconds 
Traceback (most recent call last): 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/scripts/train.py", line 252, in <module> 
    args.verbose_logging, args.debug) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/scripts/train.py", line 242, in train 
    train_obj.main_loop(time_budget=time_budget) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/train.py", line 196, in main_loop 
    self.run_callbacks_and_monitoring() 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/train.py", line 242, in run_callbacks_and_monitoring 
    self.model.monitor() 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/monitor.py", line 254, in __call__ 
    for X in myiterator: 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/utils/iteration.py", line 859, in next 
    for data, fn in safe_izip(self._raw_data, self._convert)) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/utils/iteration.py", line 859, in <genexpr> 
    for data, fn in safe_izip(self._raw_data, self._convert)) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/utils/iteration.py", line 819, in fn 
    return dspace.np_format_as(batch, sp) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/space/__init__.py", line 458, in np_format_as 
    space=space) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/space/__init__.py", line 513, in _format_as 
    self._validate(is_numeric, batch) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/space/__init__.py", line 617, in _validate 
    self._validate_impl(is_numeric, batch) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/space/__init__.py", line 984, in _validate_impl 
    super(IndexSpace, self)._validate_impl(is_numeric, batch) 
    File "/Users/[MY_NAME]/pylearn2/pylearn2/space/__init__.py", line 796, in _validate_impl 
    (batch.dtype, self.dtype)) 
TypeError: Cannot safely cast batch dtype float64 to space's dtype int64. 

이것은 정확히 무엇을 의미합니까? CSVDataset 코드를 살펴본 후 np.loadtxt을 사용하여 데이터를로드합니다.이 데이터는 부동 소수점으로 가져와야합니다. xor.csv을 실수로 (예 : 1 -> 1.0) 표시되도록 수정하면 아무 것도 변경되지 않습니다.

답변

6

이것은 CSVDataset의 y 속성 유형이 float64로 설정 되었기 때문입니다.
다음과 같이 csv_dataset.py의 __init __()를 수정했습니다.
나는 이것이 pylearn2의 문제인지 아닌지를 모른다.

if self.task == 'regression': 
     super(CSVDataset, self).__init__(X=X, y=y) 
    else: 
     super(CSVDataset, self).__init__(X=X, y=y.astype(int), 
             y_labels=np.max(y) + 1) 

BTW는 소프트 맥스 층의

  • n_classes 2
  • "CHANNEL_NAME 'valid_y_misclass'"해야 당신 YAML 수정해야 당신이 monitoring_dataset의 "유효"속성을 설정하지 않기 때문에 오류가 발생합니다 .
    모니터링 데이터 세트의 "유효"를 설정하거나 대신 'train_y_misclass'를 사용하십시오.
+0

감사합니다. 그리고 나는 당신의 제안에 따라 나의 yaml을 고쳤다. 나는 pylearn2에서 초보자입니다. :) –