执行多类分类时Keras出错

时间:2018-02-26 12:15:22

标签: python keras multiclass-classification

我正在尝试在Keras进行多级分类。我正在使用 crowdflower dataset。以下是我的代码:

ValueError: Error when checking target: expected dense_3 to have shape (9,) but got array with shape (1,)

我收到此错误:

WITH cte AS
 (
   SELECT COUNT(*) AS cntAccounts, 0 AS cntUsers FROM accounts
   UNION ALL
   SELECT 0 AS cntAccounts, COUNT(*) AS cntUsers FROM users
 )
SELECT
   SUM(cntAccounts) AS NumberOfAccounts
  ,SUM(cntUsers ) AS NumberOfUsers
FROM cte

有人可以用我的逻辑指出错误吗?我理解我的问题与Exception: Error when checking model target: expected dense_3 to have shape (None, 1000) but got array with shape (32, 2)

类似

但我还没有找到错误。

1 个答案:

答案 0 :(得分:0)

您在该代码中犯了多个错误,我会建议一些改进以使代码更好:

  1. 删除:for i,row in df.iterrows():您可以直接使用

    labels = df['sentiment']
    texts = df['content']
    
  2. 使用tokenizer = Tokenizer(5000)设置最大单词时,这是词汇量大小。

  3. 填充data = pad_sequences(sequences, maxlen=37)时提供最大长度。

  4. 不要将输出转换为值labels = np.asarray(encoded_Y)的数组,它不是回归。你必须对它进行一次热编码:

    from keras.utils import np_utils
    labels = np_utils.to_categorical(encoded_Y)
    
  5. 当提供嵌入层model.add(Embedding(40000, 8,input_length=37))时,您的词汇大小为40K,嵌入维度为8.没有多大意义,因为您提供的数据集具有接近40K的唯一单词。不能全部给予适当的嵌入。 model.add(Embedding(5000, 30, input_length=37))更改为更合理的数字词汇大小。注意:如果您想使用40000,请将Tokenizer(5000)更新为相同的号码。

  6. 使用embedding_dim = 8vocab_size=40000等变量。无论价值如何。

  7. 使用此代替model.add(Dense(9, activation='softmax'))作为最后一层,保持代码清洁。

    model.add(Dense(labels.shape[1], activation='softmax'))
    
  8. 最终工作代码附在此Link