我正在尝试使用以下格式的 2D 目标训练 ANN: 目标=[(1,0,0),(0,1,0),(1,0,0)] 我的特征的大小是 (5996, 5),目标是 (5996, 3),我尝试使用下面的代码:
num_outputs = 3
num_elements = 3
ann.add(tf.keras.layers.Dense(units=8,activation="relu"))
ann.add(tf.keras.layers.Dropout(0.2))
ann.add(tf.keras.layers.Dense(units=64,activation="relu"))
ann.add(tf.keras.layers.Dense(units=8,activation="relu"))
ann.add(tf.keras.layers.Dense(units=1,activation="sigmoid"))
ann.add(tf.keras.layers.RepeatVector(num_outputs))
ann.add(tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(num_elements)))
ann.compile(optimizer='adam',loss = 'binary_crossentropy',metrics=['accuracy'])
ann_history=ann.fit(X_trn, y_trn, batch_size = 25, epochs = 100)
但我收到此错误:
InvalidArgumentError: Incompatible shapes: [25,3] vs. [25,3,3]
[[node gradient_tape/binary_crossentropy/mul/BroadcastGradientArgs (defined at <ipython-input-102-9ad8105af048>:1) ]] [Op:__inference_train_function_103981]
函数调用栈: train_function
你能帮我解决这个问题吗? 谢谢。
答案 0 :(得分:0)
尝试 9 个元素的一维输出,然后在 ANN 完成后将数据转换为二维。
# replace this line
ann.add(tf.keras.layers.Dense(units=1,activation="sigmoid"))
# with this line
ann.add(tf.keras.layers.Dense(units=9,activation="sigmoid"))
作为通用逼近器,人工神经网络应该为您提供正确的结果。此解决方案的唯一问题是您必须在训练和测试时创建额外的步骤,因为立即从 ANN 中输出的数据将与目标数据不匹配,但简单的转换将纠正任何错误。