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就可以,對原來的數據量沒有影響的,只是擴展一個維度,沒有增加數據量呀。理論上擴展維度肯定是可以的,有報錯的話應該是實現的問題。