2017-04-15 1 views
0

저는 파이썬 2.7 및 우분투 16.04에서 Cython에 문제가 있습니다. cs231n 코스 (Convolutional Neural Networks)에서 코드를 실행하려고합니다. 그러나 유일한 기능은 입니다. col2im_6d_cython이 작동하지 않습니다. 오류 :Python 2.7 및 Cython : 전역 이름 col2im_6d_cython이 정의되지 않았습니다.

NameError: global name 'col2im_6d_cython' is not defined 

col2im_6d_cythonim2col_cython.pyx에 정의 된 기능 :

def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, 
     int HH, int WW, int pad, int stride): 
    cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) 
    cdef int out_h = (H + 2 * pad - HH)/stride + 1 
    cdef int out_w = (W + 2 * pad - WW)/stride + 1 
    cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), 
                 dtype=cols.dtype) 

    col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) 

    if pad > 0: 
     return x_padded[:, :, pad:-pad, pad:-pad] 
    return x_padded 

col2im_6d_cython가 호출되는 파일이 fast_layers.py :

from cs231n.im2col_cython import col2im_cython, im2col_cython 
from cs231n.im2col_cython import col2im_6d_cython 

def conv_backward_strides(dout, cache): 
     x, w, b, conv_param, x_cols = cache 
    stride, pad = conv_param['stride'], conv_param['pad'] 

    N, C, H, W = x.shape 
    F, _, HH, WW = w.shape 
    _, _, out_h, out_w = dout.shape 

    db = np.sum(dout, axis=(0, 2, 3)) 

    dout_reshaped = dout.transpose(1, 0, 2, 3).reshape(F, -1) 
    dw = dout_reshaped.dot(x_cols.T).reshape(w.shape) 

    dx_cols = w.reshape(F, -1).T.dot(dout_reshaped) 
    dx_cols.shape = (C, HH, WW, N, out_h, out_w) 
    dx = col2im_6d_cython(dx_cols, N, C, H, W, HH, WW, pad, stride) 

    return dx, dw, db 

c ol2im_cythonim2col_cython이 제대로 작동하지만 col2im_6d_cython 만 작동하지 않습니다.

Cython 설치에 문제가있는 것 같습니다. 내가 실행하여 설치 한 :

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Build import cythonize 
import numpy 

extensions = [ 
Extension('im2col_cython', ['im2col_cython.pyx'], 
     include_dirs = [numpy.get_include()] 
), 
] 

setup(
    ext_modules = cythonize(extensions), 
) 

그리고 사이 썬를 설치할 때 경고를했다 : 파이썬 setup.py의 build_ext의 --inplace

setup.py이다

Warning: Extension name 'im2col_cython' does not match fully qualified name 'cs231n.im2col_cython' of 'im2col_cython.pyx' 
running build_ext 

col2im_6d_cython이 작동하지 않는 이유는 무엇입니까? 그것을 고칠 수있는 방법이 있습니까?

미리 감사드립니다.

+0

이것은 도움이되지 않지만 여기에 게시 된 cs231 과정과 비슷한 문제가있는 사람들의 목록이 많아 실제 해결책이 없습니다. – DavidW

답변

0

Anaconda3를 완전히 제거하고 Anaconda2를 설치하면 문제가 해결됩니다. 그런 다음 새로운 환경을 만들고 필요한 모든 패키지를 다시 설치했습니다. 오류가 지금 표시되지 않습니다

관련 문제