【问题标题】:Train a ANN with 2D output训练具有 2D 输出的 ANN
【发布时间】:2021-06-24 04:10:23
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    尝试 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 应该会给你正确的结果。此解决方案的唯一问题是您必须在训练和测试时创建额外的步骤,因为立即从 ANN 输出的数据与目标数据不匹配,但简单的转换将纠正任何错误。

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 1970-01-01
      • 2013-04-04
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多