这些时在用tensorFlow中的GRU做一些试验时发现:
假定训练集为10000个点,每个点为2000个数据,那么输入要求为(10000,2000,1)的数据和(10000,)的标签。
如果只有一层GRU直接调用
tf.keras.layers.GRU(512, activation='tanh', recurrent_activation='sigmoid', use_bias=True)
没有问题,但如果想要调用多层GRU。每层都写成以上形式就会报错。
ValueError: Input 0 of layer gru_1 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 512]
看一下GRU的手册
tf.keras.layers.GRU(
units,
activation="tanh",
recurrent_activation="sigmoid",
use_bias=True,
kernel_initializer="glorot_uniform",
recurrent_initializer="orthogonal",
bias_initializer="zeros",
kernel_regularizer=None,
recurrent_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
recurrent_constraint=None,
bias_constraint=None,
dropout=0.0,
recurrent_dropout=0.0,
return_sequences=False,
return_state=False,
go_backwards=False,
stateful=False,
unroll=False,
time_major=False,
reset_after=True,
**kwargs
)
GRU对于输出有一个选项:
return_sequences=False,
GRU的默认是False,导致GRU不能多层使用。上面报错中的gru_1实际上指的是第二层GRU。
为了能使用多层GRU,于是,需要在使用GRU时把上面的代码改为
tf.keras.layers.GRU(512, activation='tanh', recurrent_activation='sigmoid', use_bias=True, return_sequences=True)
虽然这样就可以使用多层GRU,但是会发现:如果在训练后要继续使用pred方法,pred的输出不是想要的(xxx,)而是(xxx,1)。
综上所述:如果要使用多层GRU,那么除最后一层的其它所有层使用
tf.keras.layers.GRU(512, activation='tanh', recurrent_activation='sigmoid', use_bias=True, return_sequences=True)
最后一层使用
tf.keras.layers.GRU(512, activation='tanh', recurrent_activation='sigmoid', use_bias=True)
即最后一层用return_sequences=False,其它层用return_sequences=True。
4387



被折叠的 条评论
为什么被折叠?



