【问题标题】:`LinAlgError: SVD did not converge` when attempting to rescale a 4D array using `skimage.transform.rescale`尝试使用“skimage.transform.rescale”重新缩放 4D 数组时,“LinAlgError:SVD 未收敛”
【发布时间】:2015-11-21 03:15:21
【问题描述】:

我想将 MNIST 数据的 4D 数组重新缩放 0.5 倍。使用skimage.transform.rescale 时出现错误:

LinAlgError: SVD did not converge

我觉得这可能与图像尺寸有关,但文档没有提及图像尺寸。

from skimage import transform
...
...
data = load_mnist() #Contains mnist data in format (50000, 1, 28, 28)
data_rescaled = transform.rescale(data, 0.5)

【问题讨论】:

    标签: python image numpy scikit-image rescale


    【解决方案1】:

    来自the documentation

    skimage.transform.rescale(image, scale, order=1, mode='constant', cval=0, clip=True, preserve_range=False)[source]

    按一定比例缩放图像。

    对放大或缩小图像执行插值。对于通过应用算术和或平均值对具有整数因子的 N 维图像进行下采样,请分别参见 skimage.measure.local_sumskimage.transform.downscale_local_mean。 ...

    scale : {float, tuple of floats}

    比例因子。单独的比例因子可以定义为(row_scale, col_scale)

    我的解释是skimage.measure.rescale 只支持二维图像。快速尝试为每个维度传递单独的比例因子似乎证实了这一点:

    In [1]: data = np.random.randn(500, 1, 28, 28)
    
    In [2]: rescaled = transform.rescale(data, (0.5, 0.5, 0.5, 0.5))
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-2-638fc58c2154> in <module>()
    ----> 1 rescaled = transform.rescale(data, (0.5, 0.5, 0.5, 0.5))
    
    /home/alistair/.venvs/rfmap/lib/python2.7/site-packages/skimage/transform/_warps.pyc in rescale(image, scale, order, mode, cval, clip, preserve_range)
        164 
        165     try:
    --> 166         row_scale, col_scale = scale
        167     except TypeError:
        168         row_scale = col_scale = scale
    
    ValueError: too many values to unpack
    

    如文档所述,您可以改用 skimage.transform.local_sumskimage.downscale_local_mean,前提是您只需按整数因子(在您的情况下为 2)进行下采样。

    另一个支持对非整数缩放因子使用插值的替代方法是scipy.ndimage.zoom

    In [3]: from scipy import ndimage
    
    In [4]: rescaled = ndimage.zoom(data, 0.5)
    
    In [5]: rescaled.shape
    Out[5]: (250, 1, 14, 14)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多