第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

模型返回錯誤 - ValueError:logits 和標簽必須具有相同的形狀

模型返回錯誤 - ValueError:logits 和標簽必須具有相同的形狀

寶慕林4294392 2023-07-11 14:12:52
我正在使用基于 keras 的多標簽分類器。我創(chuàng)建了一個加載訓練和測試數據的函數,然后在函數本身內處理/拆分 X/Y。我在運行模型時遇到錯誤,但不太確定其含義:這是我的代碼:def KerasClassifer(df_train, df_test):  X_train = df_train[columnType].copy()  y_train = df_train[variableToPredict].copy()  labels = y_train.unique()  print(X_train.shape[1])  #using keras to do classification  from tensorflow import keras  from tensorflow.keras.models import Sequential  from tensorflow.keras.layers import Dense, Dropout, Activation  from tensorflow.keras.optimizers import SGD  model = Sequential()  model.add(Dense(5000, activation='relu', input_dim=X_train.shape[1]))  model.add(Dropout(0.1))  model.add(Dense(600, activation='relu'))  model.add(Dropout(0.1))  model.add(Dense(len(labels), activation='sigmoid'))  sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)  model.compile(loss='binary_crossentropy',                optimizer=sgd)  model.fit(X_train, y_train, epochs=5, batch_size=2000)  preds = model.predict(X_test)  preds[preds>=0.5] = 1  preds[preds<0.5] = 0  score = model.evaluate(X_test, y_test, batch_size=2000)  score以下是我的數據的屬性(如果有幫助的話):x train shape  (392436, 109)y train shape  (392436,)len of y labels 18如何修復代碼以避免此錯誤?
查看完整描述

2 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

如果您有 18 個類別,則 的形狀y_train應該是(392436, 18)。您可以tf.one_hot為此使用:

import tensorflow as tf

y_train = tf.one_hot(y_train, depth=len(labels))

如果您從一列中獲取值,我懷疑這不是“多標簽”,而是多類。一個樣本真的可以屬于多個類別嗎?如果沒有,您還需要更改其他一些內容。例如,您需要 softmax 激活:

model.add(Dense(len(labels), activation='softmax'))

還有分類交叉熵損失:

model.compile(loss='categorical_crossentropy', optimizer=sgd)


查看完整回答
反對 回復 2023-07-11
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

你的標簽是一維的......如果你的目標是操作多標簽任務,你需要對它們進行一次性編碼。您可以簡單地使用


tf.keras.utils.to_categorical(y, num_classes)


通過這種方式,您可以將目標從 (n_sample) 轉換為 (n_sample, num_classes)


如果這是一個簡單的多類問題,那么您有以下兩種可能性:


1 種可能性)如果您有 1D 整數編碼目標,您可以使用sparse_categorical_crossentropy帶有softmax激活的損失函數來生成概率


n_class = 3

n_features = 100

n_sample = 1000


X = np.random.randint(0,10, (n_sample,n_features))

y = np.random.randint(0,n_class, n_sample)


inp = Input((n_features,))

x = Dense(128, activation='relu')(inp)

out = Dense(n_class, activation='softmax')(x)


model = Model(inp, out)

model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

history = model.fit(X, y, epochs=3)


pred = np.argmax(model.predict(X), 1)

2 種可能性)如果您對目標進行了 one-hot 編碼以獲得 2D 形狀(n_samples, num_classes),則可以categorical_crossentropy與softmax激活一起使用來生成概率


n_class = 3

n_features = 100

n_sample = 1000


X = np.random.randint(0,10, (n_sample,n_features))

y = tf.keras.utils.to_categorical(np.random.randint(0,n_class, n_sample))


inp = Input((n_features,))

x = Dense(128, activation='relu')(inp)

out = Dense(n_class, activation='softmax')(x)


model = Model(inp, out)

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

history = model.fit(X, y, epochs=3)


pred = np.argmax(model.predict(X), 1)


查看完整回答
反對 回復 2023-07-11
  • 2 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號