我正在创建一个LSTM网络。我有形状为(1400,17640)的输入垫顺序数组,形状为(1400,)的遮罩数组(1400,17640)和y(目标数组),尽管目标具有10个不同的类值。(1-10)。 因此,我将输出单位为10且损失为单位的密集层定义为sparsecategoricalcrossentropy。 LSTM网络代码:-
pad_seq = np.random.rand(17640,1)
def create_model():
#input 1 (pad sequence)
input_layer1 = Input(shape=(17640,1),name = 'input_layer',dtype='float32')
#input 2 (mask)
input_layer2 = Input(shape=(17640,),name='input_mask',dtype='bool')
#LSTM layer
LSTM_layer = LSTM(25,return_sequences=False,name = 'LSTM_layer')(input_layer1,mask = input_layer2)
#Dense layer
dense = Dense(50,activation='relu',kernel_initializer=he_normal(),kernel_regularizer=l2(0.0001),name = 'dense')(LSTM_layer)
#output layer
dense_1 = Dense(10, activation = 'softmax',name='dense_1')(dense)
#concat = concatenate([input_layer,input_mask])
model = Model([input_layer1, input_layer2],dense_1)
#compile
model.compile(loss='SparseCategoricalCrossentropy', optimizer=keras.optimizers.Adam(lr=0.001,decay = 1e-4),metrics=[tfa.metrics.F1Score(num_classes = 10)])
return model
但是在拟合模型时,我遇到了价值错误:
ValueError: Dimension 0 in both shapes must be equal, but are 10 and 1. Shapes are [10] and [1]. for '{{node AssignAddVariableOp_5}} = AssignAddVariableOp[dtype=DT_FLOAT](AssignAddVariableOp_5/resource, Cast_6)' with input shapes: [], [1].
为了匹配模型,应该比较其中两个输入形状是否相互匹配