从python中的for循环调用C ++

时间:2018-10-07 12:45:04

标签: python c++

我正在python循环内调用cuda-convnet2(深度学习程序)。由于cuda_convnet2与python模块一起具有C ++模块,因此当我在循环内调用cuda-convnet2时,似乎C ++模块不会在每次迭代后终止并引起问题。可以在以下链接找到C ++模块: https://github.com/akrizhevsky/cuda-convnet2/blob/master/cudaconvnet/src/pyconvnet.cu 您会发现在第39行中它生成了一个空模型。从cuda-convnet2 python模块调用第67行以初始化神经网络模型。如果我只打一次cuda-convnet2,everythind很好。但是,当我在for循环中调用它时,在循环的第一次迭代成功执行之后,在第二次迭代中,我从c ++模块中收到以下错误:

src / pyconvnet.cu:68:PyObject * initModel(PyObject *,PyObject *):断言'model == NULL'失败。

任何想法我该怎么办?

有关更多详细信息:

这是名为convnet.py的python模块: https://github.com/akrizhevsky/cuda-convnet2/blob/master/convnet.py 此模型从 main 调用构造函数(第288行),然后在第106行(此处为IGPUmodel类https://github.com/akrizhevsky/cuda-convnet2/blob/master/python_util/gpumodel.py)调用IGPUmodel类的构造函数,并在此文件行100中打开通过调用convnet.py第114行中定义的init_model_lib()函数转换为C ++模块的方法。 我对此脚本做了一些小的更改(删除了 main ,因为我有自己的 main ),然后将第288行和第289行复制到了自己的脚本中:

def try_params(n_resources,params,op,load_dic):
        validation_frequency = 4
        if n_resources<4:
            validation_frequency=1
        model = ConvNet(op, load_dic,n_resources,validation_frequency)
        result = model.start()
        return result

我在for循环中调用此函数:

for t in T:
      self.counter += 1
      start_time = time()                                
      result = self.try_params( n_iterations, t,self.op,self.load_dic )                                                       
      assert( type( result ) == dict )
      assert( 'loss' in result )

0 个答案:

没有答案