Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i did not find any SVD operations in the code #1

Open
yhao-z opened this issue Jan 4, 2024 · 0 comments
Open

i did not find any SVD operations in the code #1

yhao-z opened this issue Jan 4, 2024 · 0 comments

Comments

@yhao-z
Copy link

yhao-z commented Jan 4, 2024

In your paper, u proposed to use low rank proporties in the CNN-extracted domain and also used the singular value thresholding (NOT soft thresholding) in that domain. Indeed, it is an excellent paper.

However, when i check the code in BuildModel.py, i just saw the soft thresholding without any singular value decompositions, which in the paper are for getting the singular values and then thresholding them.

The code is like,

    # rk <-- yk
    rk = tf.subtract(layeryk[-1], tf.scalar_mul(lambdaStep, tf.multiply(PhiT, tf.subtract(tf.multiply(Phi, layeryk[-1]), Yinput))))

    # Drk <-- rk
    weight0 = add_conv2d_weight([filterSize1, filterSize1, nOfModel, convSize1], 0)
    Drk = tf.nn.conv2d(rk, weight0, strides=[1, 1, 1, 1], padding='SAME')

    # Transform Module
    weight1 = add_conv2d_weight([filterSize2, filterSize2, convSize1, convSize2], 1)
    weight2 = add_conv2d_weight([filterSize3, filterSize3, convSize2, convSize3], 2)
    Frk = tf.nn.conv2d(Drk, weight1, strides=[1, 1, 1, 1], padding='SAME')
    Frk = tf.nn.relu(Frk)
    Frk = tf.nn.conv2d(Frk, weight2, strides=[1, 1, 1, 1], padding='SAME')
    field = Frk

    # Soft-thresholding Module
    softFRk = tf.multiply(tf.sign(Frk), tf.nn.relu(tf.subtract(tf.abs(Frk), softThr)))


    # Inverse Transform Module
    weight3 = add_conv2d_weight([filterSize3, filterSize3, convSize3, convSize2], 3)
    weight4 = add_conv2d_weight([filterSize2, filterSize2, convSize2, convSize1], 4)
    FFrk = tf.nn.conv2d(softFRk, weight3, strides=[1, 1, 1, 1], padding='SAME')
    FFrk = tf.nn.relu(FFrk)
    FFrk = tf.nn.conv2d(FFrk, weight4, strides=[1, 1, 1, 1], padding='SAME')

So if it is in this structure, then i think there are no differences between this code and the ISTA-Net.

I'm totally confused. If I ignored anything important for this issue in the code, plz point it out. Thanks a lot!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant