<p>简而言之,不恰当地调用<code>numpy.asarray</code>:<code>numpy.asarray</code>不连接两个<code>cupy.ndarray</code>,而它连接两个<code>numpy.ndarray</code>s</p>
<p>简而言之,您的代码:</p>
<pre><code>import numpy, cupy
final_train_set = []
N_PATCH_PER_IMAGE = 8
for i in range(10):
label = 0
temp_slice_1 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]
temp_slice_2 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]
for j in range(N_PATCH_PER_IMAGE):
temp_slice_1[j] = cupy.array(temp_slice_1[j])
temp_slice_2[j] = cupy.array(temp_slice_2[j])
final_train_set.append(
[
# attempting to concatenate two cupy arrays by numpy.asarray
numpy.asarray([temp_slice_1[j], temp_slice_2[j]]),
label
]
)
</code></pre>
<p>臭虫</p>
^{pr2}$
^{3}$
<p>解决方案:注释掉两行</p>
<pre><code>import numpy # not import cupy here
for i in range(10):
label = 0
temp_slice_1 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]
temp_slice_2 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]
for j in range(N_PATCH_PER_IMAGE):
# temp_slice_1[j] = cupy.array(temp_slice_1[j]) <- comment out!
# temp_slice_2[j] = cupy.array(temp_slice_2[j]) <- comment out!
final_train_set.append(
[
# concatenate two numpy arrays: usually cupy should not be used in dataset
numpy.asarray([temp_slice_1[j], temp_slice_2[j]]),
label
]
)
</code></pre>
<hr/>
<p>脚注</p>
<ol>
<li><p>在您展示的代码中,<code>xp</code>没有指定,因此您无法从任何人那里获得答案。如果你不能把问题分开,请发布你的整个代码,包括模型。</p></li>
<li><p>我想您可能因为另一个原因而无法运行培训代码。在这段代码中,数据首先在<code>final_train_set</code>的构造中被带到主内存中。但是,如果图像的数量很大,主内存就会耗尽,<code>MemoryError</code>将被提升。(换言之,如果图像数量少,内存足够大,则不会发生错误)
在这种情况下,以下引用(<a href="https://docs.chainer.org/en/stable/glance.html" rel="nofollow noreferrer">Chainer at glance</a>和<a href="https://docs.chainer.org/en/stable/reference/datasets.html" rel="nofollow noreferrer">Dataset Abstraction</a>)将有所帮助。</p></li>
</ol>