【问题标题】:How to process data for 3d convolutional neural network?如何处理 3d 卷积神经网络的数据?
【发布时间】:2018-08-07 12:23:29
【问题描述】:

我有一组11*11*21 3D 数据,我想使用 3D convnet 进行分类。通过使用批量大小为 64 的 gluon 数据加载器,我的网络输入张量为 (64L, 11L, 11L, 21L)。当我尝试运行该程序时,出现以下错误。

"infer_shape error. Arguments:
data: (64L, 11L, 11L, 21L)"

然后我意识到 3D 转换需要 5D 张量作为输入,因此我被困在如何为网络创建 5D 张量输入。

如果这有帮助的话,我目前正在使用代码来为 convnet 创建数据。

train_dataset = mx.gluon.data.ArrayDataset((noA_list+A_list),     (label_noA+label_A))
test_dataset = mx.gluon.data.ArrayDataset((noA_test_list+A_list_test),(label_noA_test+label_A_test))
train_data = mx.gluon.data.DataLoader(train_dataset, batch_size= 64,shuffle= True, num_workers = cpucount)
test_data = mx.gluon.data.DataLoader(test_dataset,batch_size= 64,shuffle= True, num_workers = cpucount)

【问题讨论】:

    标签: python conv-neural-network mxnet


    【解决方案1】:

    是的,您需要 5 维张量才能使用 Conv3d。默认情况下,张量格式应为NCDHW 其中:

    ‘N’ - 批量大小, 'C' - 通道, ‘H’ - 高度 ‘W’ - 宽度 “D”——深度。

    卷积应用于“D”、“H”和“W”维度。

    因此,如果您缺少通道维度(并且您正在处理灰度数据),您可以创建此维度:

    # a.shape is (64, 11, 11, 21)
    a = mx.nd.random.uniform(shape=(64, 11, 11, 21))
    # adding 'channel' dimension
    a.expand_dims(1)
    # new a.shape is (64, 1, 11, 11, 21)
    

    【讨论】:

    • 我运行了你的代码,a.shape 似乎仍然是 (64L, 11L, 11L, 21L),我是不是做错了什么?
    • 哦,很抱歉造成混乱。当然,a 不会改变,它是函数具有适当维度的结果。因此,只需将上次执行的结果分配给新变量,如 b = a.expand_dims(1) 或重用 a,如 a = a.expand_dims(1)
    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 2020-08-20
    • 2018-10-19
    • 2017-01-01
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多