0

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)
4

1 に答える 1

1

ドキュメントから:

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

特定の倍率で画像をスケーリングします。

画像を拡大または縮小する補間を実行します。算術和または算術平均を適用して整数因子を使用して N 次元イメージをダウンサンプリングするには、それぞれskimage.measure.local_sumおよびを参照してください。skimage.transform.downscale_local_mean...

scale : {float, float のタプル}

倍率。個別の倍率は として定義できます(row_scale, col_scale)

私の解釈では、skimage.measure.rescale2D 画像のみをサポートしています。各次元に個別のスケーリング係数を渡そうとする簡単な試みは、これを確認しているようです:

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

ドキュメントに記載されているように、整数係数 (この場合は 2) だけダウンサンプリングする必要がある場合は、代わりにskimage.transform.local_sumorを使用できます。skimage.downscale_local_mean

非整数ズーム係数の補間の使用をサポートする別の方法は次の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)
于 2015-11-21T15:59:25.783 に答える