该文件演示了ConvLSTM2D和Conv3D的使用,
他的网络结构打印出来为
____________________________________________________________________________________________________
Layer (type) Output Shape Param #
====================================================================================================
conv_lst_m2d_1 (ConvLSTM2D) (None, None, 40, 40, 40) 59200
____________________________________________________________________________________________________
batch_normalization_1 (BatchNormalization) (None, None, 40, 40, 40) 160
____________________________________________________________________________________________________
conv_lst_m2d_2 (ConvLSTM2D) (None, None, 40, 40, 40) 115360
____________________________________________________________________________________________________
batch_normalization_2 (BatchNormalization) (None, None, 40, 40, 40) 160
____________________________________________________________________________________________________
conv_lst_m2d_3 (ConvLSTM2D) (None, None, 40, 40, 40) 115360
____________________________________________________________________________________________________
batch_normalization_3 (BatchNormalization) (None, None, 40, 40, 40) 160
____________________________________________________________________________________________________
conv_lst_m2d_4 (ConvLSTM2D) (None, None, 40, 40, 40) 115360
____________________________________________________________________________________________________
batch_normalization_4 (BatchNormalization) (None, None, 40, 40, 40) 160
____________________________________________________________________________________________________
conv3d_1 (Conv3D) (None, None, 40, 40, 1) 1081
====================================================================================================
Total params: 407,001
Trainable params: 406,681
Non-trainable params: 320
____________________________________________________________________________________________________
其输入和输出分别为noisy_movies和shifted_movies,也就是两段电影,影片内容是用代码生成的移动方框,如下
只要在代码中添加如下两行,即可保存一段影片:
import imageio
imageio.mimsave("my.gif", shifted_movies[3], 'GIF', duration=0.2)
而noisy_movies和shifted_movies的shape均为(1200, 15, 40, 40, 1),
也就是包含1200个影片,每个影片有15帧,分辨率为40*40,
noisy_movies和shifted_movies影片内容有什么关系呢?
其实shifted_movies是noisy_movies的每一帧的下一帧,只不过有一点点噪音而已
如果把代码中的
if np.random.randint(0, 2):
noise_f = (-1)**np.random.randint(0, 2)
noisy_movies[i, t,
x_shift - w - 1: x_shift + w + 1,
y_shift - w - 1: y_shift + w + 1,
0] += noise_f * 0.1
这段注释掉,然后在下面添加判断
for k in range(100):
print(k)
for i in range(1, 14):
print((shifted_movies[k][i - 1].astype(np.uint8)==noisy_movies[k][i].astype(np.uint8)).all())
# cv2.imshow("noisy", noisy_movies[k][i])
# cv2.imshow("shift", shifted_movies[k][i - 1])
# cv2.waitKey(1000)
我们就可以看到,这个判断永远为True,所以该代码逻辑就是,
给一段影片,预测其下一帧,可能还带一点影片清晰度的修复(消除噪音)
——————————————————————
总目录
keras的example文件解析