最近在研究顯微影象的處理,想用深度神經網路實現。發現網上對複數神經網路的資料真的不多,**幾乎都侷限於 deep complex networks 這一篇**。有很多**研究複數神經網路的,也都是前向傳播、反向傳播等理論知識,實踐性**幾乎沒有。
【我的實驗資料】拿到的資料是經過處理的複數資料,尺寸大小為888*2048。
基於keras搭建網路層,至於實數形式的網路框架已經沒有問題,並且能達到較好的效果,但是遇到複數域,問題就比較大,看了很多**,仍無收穫,希望能和各位交流討論。
遇到的問題如下:
對於**,翻譯了一遍,大致能看懂,就是在執行**時遇到不少問題,有能成功看懂**的大佬嗎?
2. 我的資料是npy格式的,我把複數comlex128形式的資料存為(batch,channels,x_dim ,y_dim),我使用原來實數搭建的網路,直接執行,沒有報錯,只是在計算時出現警告:
/home/zkh/anaconda3/envs/zmm/lib/python3.6/site-packages/numpy/core/numeric.py:531:
complexwarning: casting complex values to real discards the imaginary part
return array(a, dtype, copy=false, order=order)
所以出現的結果會直接變成實數的計算。
3. 當我把實數搭建的網路層換成1中所述的**中的層編碼時,出現了另外的問題。
例如:
input_img = input((1,888,2048))
#x = conv.complexconv2d(3, (3, 3),padding='same')(input_img)
x =convolution2d(3, (3, 3),padding='same')(input_img)
autoencoder = model(inputs=input_img, outputs=x)
decoded_imgs = autoencoder.predict(x_train)
print(x)
print(decoded_imgs.shape)
執行結果為:tensor("conv2d_2/biasadd:0", shape=(?, 1, 888, 3), dtype=float32)
(1, 1, 888, 3)
而當改為
input_img = input((1,888,2048))
x = conv.complexconv2d(3, (3, 3),padding='same')(input_img)
#x =convolution2d(3, (3, 3),padding='same')(input_img)
autoencoder = model(inputs=input_img, outputs=x)
decoded_imgs = autoencoder.predict(x_train)
print(x)
print(decoded_imgs.shape)
執行結果為:tensor("complex_conv2d_2/biasadd:0", shape=(?, 1, 888, 6), dtype=float32)
(1, 1, 888, 6)
對於為什麼輸入的是3個卷積核,而輸出的是6個,表示疑問,還有複數complex128直接變為float32型別也表示疑問。
4. 第一次執行池化層時,直接報錯如下:
-----
typeerror traceback (most recent call last)
in ()
2 x = conv.complexconv2d(6, (3, 3),padding='same')(input_img)
3 #x =convolution2d(3, (3, 3),padding='same')(input_img)
----> 4 x = pool.spectralpooling2d((2, 2))(x)
5 autoencoder = model(inputs=input_img, outputs=x)
6 decoded_imgs = autoencoder.predict(x_train)
typeerror: __init__() takes 1 positional argument but 2 were given
後來試驗之後,知道了錯誤的原因,改為了:
x = pool.spectralpooling2d(gamma=[0.15,0.15])(x)
錯誤是改掉了,但是結果延續上面的,直接以實數的形式出現。
5. 還有個問題是,複數的值差別挺大的,我要想使用自編碼形式的話,我的損失函式該使用什麼呢?
之前實數的時候loss用的mse,但發現相位很接近的兩個資料的複數形式的資料,兩者差別很大,所以mse不是很好的選擇,所以很疑惑用什麼損失函式比較好?
比如:相位資料只差0.4的兩個資料,並且人為也知道它們是比較接近的,但是複數差別為
(2.23770128717e+12-644411468251j),所以這就對損失函式的選擇要求比較高。有能對我提出的問題解答的嗎,或者能提供一點思路,或者對複數神經網路有研究的,或者也在研究這個的?
希望一起**。
簡單神經網路的搭建
coding utf 8 created on wed mar 14 09 50 13 2018 author 102121 from tensorflow.examples.tutorials.mnist import input data import tensorflow as tf 匯入mn...
Tensorflow神經網路的搭建
關於神經網路nn結構,在最近的課程中推進了重新認識了下nn結構。多層向前神經網路由3部分組成,輸入層 input layer 隱藏層 hidden layers 輸出層 output layers 如下圖 張量 張量就是多維陣列 列表 用 階 表示張量的維度。0 階張量稱作標量,表示乙個單獨的數 舉...
神經網路的簡單搭建
bp神經網路是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。bp網路能學習和存貯大量的 輸入 輸出模式對映關係,而無需事前揭示描述這種對映關係的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷 調整網路的權值和閾值,使網路的誤差平方和最小。通俗一點講就是一種...