我正在尝试在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)
类似但我还没有找到错误。
答案 0 :(得分:0)
您在该代码中犯了多个错误,我会建议一些改进以使代码更好:
删除:for i,row in df.iterrows():
您可以直接使用
labels = df['sentiment']
texts = df['content']
使用tokenizer = Tokenizer(5000)
设置最大单词时,这是词汇量大小。
填充data = pad_sequences(sequences, maxlen=37)
时提供最大长度。
不要将输出转换为值labels = np.asarray(encoded_Y)
的数组,它不是回归。你必须对它进行一次热编码:
from keras.utils import np_utils
labels = np_utils.to_categorical(encoded_Y)
当提供嵌入层model.add(Embedding(40000, 8,input_length=37))
时,您的词汇大小为40K,嵌入维度为8.没有多大意义,因为您提供的数据集具有接近40K的唯一单词。不能全部给予适当的嵌入。 model.add(Embedding(5000, 30, input_length=37))
更改为更合理的数字词汇大小。注意:如果您想使用40000
,请将Tokenizer(5000)
更新为相同的号码。
使用embedding_dim = 8
,vocab_size=40000
等变量。无论价值如何。
使用此代替model.add(Dense(9, activation='softmax'))
作为最后一层,保持代码清洁。
model.add(Dense(labels.shape[1], activation='softmax'))
最终工作代码附在此Link