我正在测试一个.ipynb文件,其中包含使用自动编码器执行数据扩充的代码。您可以在以下链接中找到该文件:自动编码器数据增强示例
使用的数据集:wine.csv
我遇到的第一个错误是一个不存在的变量,它被重命名为:
# D_in = data_set.x.shape[1]
D_in = traindata_set.x.shape[1]
H = 50
H2 = 12
model = Autoencoder(D_in, H, H2).to(device)
optimizer = optim.Adam(model.parameters(), lr=1e-3)
稍后,我从以下代码中得到另一个错误:
scaler = trainloader.dataset.standardizer
recon_row = scaler.inverse_transform(recon_batch[0].cpu().numpy())
real_row = scaler.inverse_transform(testloader.dataset.x[0].cpu().numpy())
我得到以下错误,我无法解决:
ValueError: Expected 2D array, got 1D array instead:
array=[-1.1050762 0.59396696 -0.40257156 0.5084665 -0.3387986 0.5908352
0.6442218 0.7660801 -0.36749032 0.2818777 -0.06692128 0.49236417
0.7825899 0.8493577 ].
Reshape your data either using array.reshape(-1, 1)
if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
我希望你能帮我发现它。
看起来inverse_transform
需要一个矩阵。在您的代码中,您只传递了一个样本(行(,所以这不起作用。如果按照错误消息提示重新调整输入,则单元格将运行。
recon_row = scaler.inverse_transform(recon_batch[0].cpu().numpy().reshape(1, -1))
real_row = scaler.inverse_transform(testloader.dataset.x[0].cpu().numpy().reshape(1, -1))
既然你有两个形状为(1,14)
的矩阵,你还需要更改下一个单元格,以便只使用矩阵中的第一个(也是唯一一个(样本:
df = pd.DataFrame(np.stack((recon_row[0], real_row[0])), columns = cols)