用 2D 输出训练 ANN

时间:2021-06-23 15:58:11

标签: python machine-learning deep-learning neural-network

我正在尝试使用以下格式的 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

你能帮我解决这个问题吗? 谢谢。

1 个答案:

答案 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 中输出的数据将与目标数据不匹配,但简单的转换将纠正任何错误。