`LinAlgError: SVD did not converge` when attempting to rescale a 4D array using `skimage.transform.rescale`
`LinAlgError: SVD did not converge` when attempting to rescale a 4D array using `skimage.transform.rescale`
我想将 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)
skimage.transform.rescale(image, scale, order=1, mode='constant', cval=0, clip=True, preserve_range=False)
[source]
Scale image by a certain factor.
Performs interpolation to upscale or down-scale images. For down-sampling N-dimensional images with integer factors by applying the arithmetic sum or mean, see skimage.measure.local_sum
and skimage.transform.downscale_local_mean
, respectively.
...
scale : {float, tuple of floats}
Scale factors. Separate scale factors can be defined as (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_sum
或 skimage.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)
我想将 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)
skimage.transform.rescale(image, scale, order=1, mode='constant', cval=0, clip=True, preserve_range=False)
[source]Scale image by a certain factor.
Performs interpolation to upscale or down-scale images. For down-sampling N-dimensional images with integer factors by applying the arithmetic sum or mean, see
skimage.measure.local_sum
andskimage.transform.downscale_local_mean
, respectively. ...scale : {float, tuple of floats}
Scale factors. Separate scale factors can be defined as
(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_sum
或 skimage.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)