ValueError: logits和labels必须具有相同的形状((None, 10) 与 (None, 12))

我正在按照一个关于非洲语言词性标注器的教程,该教程使用基于LSTM的分类器。在运行代码时:

import pandas as pdimport numpy as npfrom keras.preprocessing import sequencefrom keras.utils import to_categoricalfrom sklearn.model_selection import train_test_splitfrom keras.models import Sequentialfrom keras.layers import Dense, LSTM, SimpleRNN, Flattenfrom keras.layers.embeddings import Embeddingfrom tensorflow.keras.callbacks import EarlyStopping#from keras.callbacks import EarlyStopping# 加载英文-耶姆巴词典为CSV文件df = pd.read_csv('dict_en_yb.csv')# 显示一些词对df.sample(frac=.1).head(15)nb_labels = len(df.word_type.unique())nb_words = df.shape[0]# 创建字母到标记的字典chars = sorted(list(set(' '.join(df.yb))))letter2idx = dict((c, i+1) for i, c in enumerate(chars))# 创建标记到字母的字典idx2letter = dict((i, c) for c, i in letter2idx.items())vocabulary_size = len(letter2idx)+1print("词汇量大小: ", vocabulary_size)X = []Y = []max_len = 0for i, r in df.iterrows():  word_vector = [letter2idx[c] for c in set(r.yb)]  label = r.word_type  if len(word_vector)>max_len:    max_len = len(word_vector)    X_max = word_vector    Y_max = label  X.append(word_vector)  Y.append(label)X = sequence.pad_sequences(X, maxlen=max_len)Y = to_categorical(Y)X.shape, Y.shapeX_train, X_test, Y_train, Y_test = train_test_split(X, Y,                                                     test_size=.2,                                                     shuffle=True, random_state=999)print("训练使用 {} 个词,验证使用 {} 个词".format(X_train.shape[0],                                                                 X_test.shape[0]))# 构建一个带有100个单元的单层LSTM并嵌入embedding_dim = 8model_lstm = Sequential()model_lstm.add(Embedding(vocabulary_size, embedding_dim, input_length=max_len))model_lstm.add(LSTM(100))model_lstm.add(Dense(nb_labels, activation='sigmoid'))model_lstm.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])model_lstm.summary()# 训练网络early_stopping = EarlyStopping(monitor='val_acc',                               min_delta=0,patience=5,verbose=1, mode='auto')history_lstm = model_lstm.fit(X_train, Y_train, epochs=50, batch_size=32,                               validation_data=(X_test, Y_test),                              callbacks=[early_stopping])scores_lstm = model_lstm.evaluate(X_test, Y_test, verbose=0)

我得到了以下错误:

 File "testing.py", line 64, in <module> callbacks=[early_stopping])...ValueError: logits和labels必须具有相同的形状((None, 10) 与 (None, 12))

看起来这与最终的Dense层中的神经元数(12)有关,这些神经元与10个类别不对应,但我不知道如何修复它。

标题


回答:

nb_labels的值更改为10,并将激活函数设置为’softmax’。Sigmoid适用于二元情况。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注