-
Notifications
You must be signed in to change notification settings - Fork 12
Description
Traceback (most recent call last):
File "/home/fm/Projects/code/AI-PAL-master/2_SAR/preprocess/sac2zarr.py", line 62, in
write_sequence('train/positive', train_pos_loader)
File "/home/fm/Projects/code/AI-PAL-master/2_SAR/preprocess/sac2zarr.py", line 35, in write_sequence
z_data[idx] = data
File "/home/fm/miniconda3/envs/mess/lib/python3.10/site-packages/zarr/core.py", line 1449, in setitem
self.set_basic_selection(pure_selection, value, fields=fields)
File "/home/fm/miniconda3/envs/mess/lib/python3.10/site-packages/zarr/core.py", line 1545, in set_basic_selection
return self._set_basic_selection_nd(selection, value, fields=fields)
File "/home/fm/miniconda3/envs/mess/lib/python3.10/site-packages/zarr/core.py", line 1935, in _set_basic_selection_nd
self._set_selection(indexer, value, fields=fields)
File "/home/fm/miniconda3/envs/mess/lib/python3.10/site-packages/zarr/core.py", line 1988, in _set_selection
self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
File "/home/fm/miniconda3/envs/mess/lib/python3.10/site-packages/zarr/core.py", line 2261, in _chunk_setitem
self._chunk_setitem_nosync(chunk_coords, chunk_selection, value, fields=fields)
File "/home/fm/miniconda3/envs/mess/lib/python3.10/site-packages/zarr/core.py", line 2265, in _chunk_setitem_nosync
cdata = self._process_for_setitem(ckey, chunk_selection, value, fields=fields)
File "/home/fm/miniconda3/envs/mess/lib/python3.10/site-packages/zarr/core.py", line 2289, in _process_for_setitem
chunk = value.astype(self._dtype, order=self._order, copy=False)
AttributeError: 'Tensor' object has no attribute 'astype'. Did you mean: 'dtype'?
使用的环境是win11,wsl ubuntu22.04.3LTS,python3.10.14,pytorch2.4.0,zarr2.18.3。
询问了deepseek得到结果是
这个错误的原因是你正试图把一个 Tensor 对象写入 Zarr 数组,但 Zarr 的写入过程期望的数据类型是 NumPy 数组,而不是 PyTorch 的 Tensor。Zarr 内部调用了 .astype() 方法,而 PyTorch 的 Tensor 并不支持这个方法。解决办法是在写入前将 Tensor 转换为 NumPy 数组。例如,如果你的变量名是 data,你可以这样转换:z_data[idx] = data.cpu().numpy()
36行z_target[idx] = target.cpu().numpy(),修改完之后可以run通