You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将TensorFlow代码迁移至PyTorch时遇AttributeError:numpy.ndarray无dim属性

TensorFlow迁移PyTorch时的AttributeError错误修复

报错核心原因:你传入torch.stft的是numpy数组,而非PyTorch张量。torch.stft仅支持操作PyTorch张量对象,numpy数组没有dim()方法,因此触发AttributeError。

具体问题与修复方案

1. 数据类型不匹配:numpy数组直接传入PyTorch函数

在代码In[35]中,你通过np.concatenate生成的Xtrain、Xtest都是numpy.ndarray类型,但transforms函数里的torch.stft要求输入必须是PyTorch张量。

修复代码:

batch_size = 1024
# 先将numpy数组转换为PyTorch张量
Xtrain_tensor = torch.from_numpy(Xtrain)
Xtest_tensor = torch.from_numpy(Xtest)

# 对张量执行分批处理
Xtrain = torch.concat(
    [transforms(Xtrain_tensor[batch_size*batch:batch_size*(batch +1)]) for batch in range(len(Xtrain_tensor)//batch_size+1)],
    axis=0
)
Xtest = torch.concat(
    [transforms(Xtest_tensor[batch_size*batch:batch_size*(batch +1)]) for batch in range(len(Xtest_tensor)//batch_size+1)],
    axis=0
)

2. PyTorch语法错误:torch.cast不存在

代码最后两行的torch.cast是TensorFlow专属语法,PyTorch中没有该函数,需替换为PyTorch的类型转换方式:

修复代码:

# 替换原torch.cast写法
Ytrain = torch.from_numpy(Ytrain).to(torch.float32)
Ytest = torch.from_numpy(Ytest).to(torch.float32)

额外优化建议

可以在transforms函数开头增加自动类型转换逻辑,避免类似类型错误重复出现:

def transforms(x: torch.Tensor) -> torch.Tensor:
    """Return Fourrier spectrogram."""
    # 自动将numpy数组转为PyTorch张量
    if not isinstance(x, torch.Tensor):
        x = torch.from_numpy(x)
    spectrograms = torch.stft(x, win_length=32, n_fft=4, hop_length=64)
    spectrograms = torch.abs(spectrograms)
    return torch.einsum("...ijk->...jki", spectrograms)

内容的提问来源于stack exchange,提问作者longwild laptop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:45:41