Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PYLERN2 CSVDataset类型错误_Python_Theano_Pylearn - Fatal编程技术网

Python PYLERN2 CSVDataset类型错误

Python PYLERN2 CSVDataset类型错误,python,theano,pylearn,Python,Theano,Pylearn,我在将自定义数据集加载到pylearn2时遇到问题。我正在尝试使用一个小的XOR数据集获得一个简单的MLP来训练。我有一个名为xor.csv的数据集,它与我的yaml文件位于同一目录中,而yaml文件与Pylern2的train.py脚本不在同一目录中 以下是xor.csv的全部内容: label,x,y 0,0,0 1,0,1 1,1,0 0,1,1 以下是我的YAML文件的全部内容: !obj:pylearn2.train.Train { dataset: &train !

我在将自定义数据集加载到pylearn2时遇到问题。我正在尝试使用一个小的XOR数据集获得一个简单的MLP来训练。我有一个名为
xor.csv
的数据集,它与我的yaml文件位于同一目录中,而yaml文件与Pylern2的
train.py
脚本不在同一目录中

以下是
xor.csv
的全部内容:

label,x,y
0,0,0
1,0,1
1,1,0
0,1,1
以下是我的YAML文件的全部内容:

!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"
        },
    ]
}
当我运行Pylern2的
train.py
脚本时,它会在训练之前失败(可能是在编译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.
[COMPUTER\u NAME]:某个文件夹[MY\u NAME]$python[PATH\u TO\u PYLEARN2\u SCRIPTS]/train.py example\u mlp.yml
/Users/[MY_NAME]/anaconda/lib/python2.7/site packages/nose/plugins/manager.py:418:UserWarning:Module argparse已经从/Users/[MY_NAME]/anaconda/lib/python2.7/site-packages导入,但是/Users/[MY_NAME]/anaconda/lib/python2.7/site-packages正在添加到sys.path
导入pkg_资源
参数和初始学习率汇总:
h0_W:0.01
h0_b:0.01
softmax_b:0.01
softmax_W:0.01
正在编译sgd_更新。。。
编译sgd_更新完成。所用时间:1.109511秒
正在编译开始记录项。。。
编译开始\u记录\u条目已完成。所用时间:0.090133秒
受监控频道:
学习率
总秒数最后一个历元
列车规格最大值
列车规格是什么意思
列车0列最低标准
列车0\u max\u x\u max\u
列车最大值x平均值
列车h0最大x最小
列车0平均值x最大值
火车是什么意思
火车是什么意思
列车0\u最小值x\u最大值
火车是什么意思
列车h0_min_x_min_
列车h0范围x最大值
列车高度范围平均值
列车h0范围x分钟
列车0排标准最大值
列车0排标准平均值
列车(h0排)最低定额
训练目标
列车y\U col\U norms\U max
火车是什么意思
列车长
列车y__max_max_class
训练你的意思是最高等级
列车y\U最小值\最大值\级
火车班
火车站
列车y排标准最大值
火车站,你是说什么
列车y排最低标准
在这个新纪元里训练几秒钟
编译accum。。。
图表大小:115
编译完成。所用时间:1.647879秒
回溯(最近一次呼叫最后一次):
文件“/Users/[MY_NAME]/pylearn2/pylearn2/scripts/train.py”,第252行,在
args.verbose_日志记录,args.debug)
文件“/Users/[MY_NAME]/pylearn2/pylearn2/scripts/train.py”,第242行,列车中
列车对象主回路(时间预算=时间预算)
文件“/Users/[MY_NAME]/pylern2/pylern2/train.py”,第196行,在主循环中
self.run_回调_和_监控()
文件“/Users/[MY_NAME]/pylern2/pylern2/train.py”,第242行,在运行回调和监控中
self.model.monitor()
文件“/Users/[MY_NAME]/pylearn2/pylearn2/monitor.py”,第254行,在调用中__
对于myiterator中的X:
文件“/Users/[MY_NAME]/pylearn2/pylearn2/utils/iteration.py”,下一页第859行
对于数据,安全izip中的fn(自身原始数据,自身转换))
文件“/Users/[MY_NAME]/pylearn2/pylearn2/utils/iteration.py”,第859行,在
对于数据,安全izip中的fn(自身原始数据,自身转换))
fn中的文件“/Users/[MY_NAME]/pylearn2/pylearn2/utils/iteration.py”,第819行
返回dspace.np格式(批处理,sp)
文件“/Users/[MY_NAME]/pylearn2/pylearn2/space/\uuuu init\uuuu.py”,第458行,np_格式
空间=空间)
文件“/Users/[MY_NAME]/pylern2/pylern2/space/_init__uuu.py”,第513行,格式为
自我验证(是数字,批处理)
文件“/Users/[MY_NAME]/pylearn2/pylearn2/space/_init__.py”,第617行,在
self.\u validate\u impl(是数字,批处理)
文件“/Users/[MY_NAME]/pylearn2/pylearn2/space/_init__.py”,第984行,在_validate_impl中
super(索引空间,self)。\u validate\u impl(是数字,批处理)
文件“/Users/[MY_NAME]/pylearn2/pylearn2/space/\uuuu init\uuuu.py”,第796行,在
(batch.dtype,self.dtype))
TypeError:无法将批处理dtype float64安全地强制转换为空间的dtype int64。

这到底是什么意思?我查看了
CSVDataset
的代码,它使用
np.loadtxt
加载数据,这应该会将它们作为浮点数引入。如果我编辑
xor.csv
使其看起来像浮动(
1->1.0
),则不会发生任何更改。

这是因为CSVDataset的y属性类型设置为浮动64。
我已经修复了csv\u dataset.py的\uuuu init\uuuu(),如下所示,它可以正常工作。
我不知道这是不是派伦2号的问题

    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)
顺便说一句,你应该修复你的yaml

  • Softmax层的n_类应为2
  • “通道名称:'valid_y_misclass'”导致错误,因为您没有设置监视数据集的“valid”属性。
    尝试设置监控数据集的“有效”,或改用“train_y_misclass”

谢谢,工作很有魅力!我根据你的建议修复了我的yaml。我是pylearn2的新手:)