nik*_*scp 5 keras tensorflow keras-2
我正在尝试使用 Keras (2.0.6) 和 TensorFlow 后端 (1.2.1) 来掩盖卷积 LSTM 层中的缺失数据:
import keras
from keras.models import Sequential
from keras.layers import Masking, ConvLSTM2D
n_timesteps = 10
n_width = 64
n_height = 64
n_channels = 1
model = Sequential()
model.add(Masking(mask_value = 0., input_shape = (n_timesteps, n_width, n_height, n_channels)))
model.add(ConvLSTM2D(filters = 64, kernel_size = (3, 3)))
Run Code Online (Sandbox Code Playgroud)
但是我收到以下 ValueError:
ValueError: Shape must be rank 4 but is rank 2 for 'conv_lst_m2d_1/while/Tile' (op: 'Tile') with input shapes: [?,64,64,1], [2].
Run Code Online (Sandbox Code Playgroud)
如何将 Masking 与 ConvLSTM2D 层一起使用?
小智 0
看来 Keras 在将 Masking 层应用于图像等任意张量时存在问题。我可以找到一种(远非理想的)解决方法,其中涉及在应用遮罩层之前展平输入。因此考虑原始模型:
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(n_timesteps, n_width, n_height, n_channels)))
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3)))
Run Code Online (Sandbox Code Playgroud)
我们可以修改如下:
input_shape = (n_timesteps, n_width, n_height, n_channels)
model = Sequential()
model.add(TimeDistributed(Flatten(), input_shape=input_shape))
model.add(TimeDistributed(Masking(mask_value=0.)))
model.add(TimeDistributed(Reshape(input_shape[1:])))
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3)))
Run Code Online (Sandbox Code Playgroud)
此解决方案在图表中添加了额外的计算,但没有额外的参数。
归档时间: |
|
查看次数: |
1432 次 |
最近记录: |