我是一名深度学习和 Tensorflow 初学者,我正在尝试使用 Tensorflow实现本文中的算法。本文使用 Matconvnet+Matlab 来实现,我很好奇 Tensorflow 是否有等效的功能来实现相同的东西。报纸说:
使用 Xavier 方法 [14] 初始化网络参数。我们在 l2 惩罚下使用了四个小波子带的回归损失,并通过使用随机梯度下降 (SGD) 对所提出的网络进行了训练。正则化参数 (λ) 为 0.0001,动量为 0.9。学习率设置为从 10-1 到 10-4,在每个 epoch 以对数规模减小。
本文使用小波变换(WT)和残差学习方法(其中残差图像= WT(HR) - WT(HR'),其中HR'用于训练)。Xavier 方法建议使用以下方法初始化变量正态分布
stddev=sqrt(2/(filter_size*filter_size*num_filters)
Q1。我应该如何初始化变量?下面的代码是否正确?
weights = tf.Variable(tf.random_normal[img_size, img_size, 1, num_filters], stddev=stddev)
本文没有详细解释如何构建损失函数。我找不到等效的 Tensorflow 函数来设置对数刻度的学习率(仅限exponential_decay
)。我理解MomentumOptimizer
相当于带有动量的随机梯度下降。
Q2:是否可以设置对数尺度的学习率?
Q3:如何创建上述损失函数?
我跟着这个网站写了下面的代码。假设model()函数返回本文提到的网络,lamda=0.0001,
inputs = tf.placeholder(tf.float32, shape=[None, patch_size, patch_size, num_channels])
labels = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels])
# get the model output and weights for each conv
pred, weights = model()
# define loss function
loss = tf.nn.softmax_cross_entropy_with_logits_v2(labels=labels, logits=pred)
for weight in weights:
regularizers += tf.nn.l2_loss(weight)
loss = tf.reduce_mean(loss + 0.0001 * regularizers)
learning_rate = tf.train.exponential_decay(???) # Not sure if we can have custom learning rate for log scale
optimizer = tf.train.MomentumOptimizer(learning_rate, momentum).minimize(loss, global_step)
注意:由于我是深度学习/Tensorflow 初学者,我在这里和那里复制粘贴代码,所以如果可以的话,请随时纠正它;)