def im2col(inputX, fsize, stride, pad): assert inputX.ndim == 4 X = T.tensor4() Xpad = lasagnepad(X, pad, batch_ndim=2) neibs = images2neibs(Xpad, (fsize, fsize), (stride, stride), 'ignore_borders') im2colfn = theano.function([X], neibs, allow_input_downcast=True) return im2colfn(inputX)
def im2col(inputX, fsize, stride, pad): assert inputX.ndim == 4 Xrows, Xcols = inputX.shape[-2:] X = T.tensor4() if pad is None: # 保持下和右的边界 rowpad = stride - (Xrows - fsize) % stride colpad = stride - (Xcols - fsize) % stride pad = ((0, rowpad), (0, colpad)) Xpad = lasagnepad(X, pad, batch_ndim=2) neibs = images2neibs(Xpad, (fsize, fsize), (stride, stride), 'ignore_borders') im2colfn = theano.function([X], neibs, allow_input_downcast=True) return im2colfn(inputX)
def im2col_compfn(shape, fsize, stride, pad, ignore_border=False): assert len(shape) == 2 assert isinstance(pad, int) if isinstance(fsize, (int, float)): fsize = (int(fsize), int(fsize)) if isinstance(stride, (int, float)): stride = (int(stride), int(stride)) X = T.tensor4() if not ignore_border: # 保持下和右的边界 rows, cols = shape rows, cols = rows + 2 * pad, cols + 2 * pad rowpad = colpad = 0 rowrem = (rows - fsize[0]) % stride[0] if rowrem: rowpad = stride[0] - rowrem colrem = (cols - fsize[1]) % stride[1] if colrem: colpad = stride[1] - colrem pad = ((pad, pad + rowpad), (pad, pad + colpad)) Xpad = lasagnepad(X, pad, batch_ndim=2) neibs = images2neibs(Xpad, fsize, stride, 'ignore_borders') im2colfn = theano.function([X], neibs, allow_input_downcast=True) return im2colfn