• Debug 路漫漫-09:构建CNN时维度不一致问题


    Build CNN Network 之后,运行,但是报错:

    ValueError: Input 0 is incompatible with layer predict_vector_conv1: expected ndim=3, found ndim=2

     原因:

    对于lexicographic,先element wise 点积(user*item),这样维度只能是2维的。而Convolutional操作和maxpooling 操作都需要3D,缺少的那一维好像没办法给出来。

     <0723好傻好傻,点乘怎么会降维呢!!原来是我在merge点乘前面做了 Flatten操作,被自己蠢哭了5555>

    那么,如何再增加一个维度呢??

    即在CNN中,如果是对矩阵做操作的话(不是图像)。maxpooling需要3dim,而我的矩阵只有2dim,这种情况可操作吗?或者说有什么办法可以额外增加一个维度吗

    法一:

    【TensorFlow用expand_dim()来增加维度:https://blog.csdn.net/jasonzzj/article/details/60811035

    one_img = tf.expand_dims(one_img, -1) #-1表示最后一维  ——好像可以解决问题。

    底下的评论:

    这里是维度上的1,理解成增加维度就够了,至于数值,其实本质是不影响的。着重理解:维度的增加。例如一个二维数据shape=(1,2),我们理解的是一行两列的数据,它所代表的是一个二维矩阵,如果shape=(3,2),其所代表的意义一样是一个二维矩阵,只是矩阵中的数据量变成了三行两列。而当我们使用这里的exped_dims(t,1)之后,那么原来的二维矩阵就变成了三维了,也就是shape=(1,1,2),第二个位置的1,可以将其理解为占位符,至于里面的数据量大小(是1或者2、3)其实并无太大意义,主要意义就是原来的数据,增加了一个维度。

    ——

    但是会出现这个问题:

    法二:

    YS:可以用 reshape 。比如数据集是N张4096的图片,就可以把它 reshape 成 N*64*64*1的维度,就是后面再多个维度长度为1的一个维度。

    法三:

    Dr.PH: 2dim也是属于3dim一种,你把2dim转化成3dim。

    XD:扩展一个维度为1就可以,对原来的数据量没有影响的,只是扩展一个维度,没有增加数据量呀。理论上扩展维度肯定是可以的,有报错的话应该是实现的问题。

  • 相关阅读:
    第二阶段冲刺第七天
    学习进度表_十五周
    第二阶段冲刺第六天
    第二阶段冲刺第五天
    第二阶段冲刺第四天
    第二阶段冲刺第三天
    Beta阶段项目总结
    Alpha阶段项目总结
    第二次冲刺站立会议10
    第二次冲刺站立会议09
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/11222457.html
Copyright © 2020-2023  润新知