Los*_*oul 3 python keras tensorflow
我正在使用基于 keras 的多标签分类器。我创建了一个加载训练和测试数据的函数,然后在函数本身内处理/拆分 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
Run Code Online (Sandbox Code Playgroud)
以下是我的数据的属性(如果有帮助的话):
x train shape (392436, 109)
y train shape (392436,)
len of y labels 18
Run Code Online (Sandbox Code Playgroud)
如何修复代码以避免此错误?
如果您有 18 个类别,则 的形状y_train应该是(392436, 18)。您可以tf.one_hot为此使用:
import tensorflow as tf
y_train = tf.one_hot(y_train, depth=len(labels))
Run Code Online (Sandbox Code Playgroud)
如果您从一列中获取值,我怀疑这不是“多标签”,而是多类。一个样本真的可以属于多个类别吗?如果没有,您还需要更改其他一些内容。例如,您需要 softmax 激活:
model.add(Dense(len(labels), activation='softmax'))
Run Code Online (Sandbox Code Playgroud)
还有分类交叉熵损失:
model.compile(loss='categorical_crossentropy', optimizer=sgd)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9170 次 |
| 最近记录: |