錬金術LSTMの実用的な戦闘

前面に書かれている:ストーブはゴミストーブであり、ダンはゴミダンです(ダンの最高年齢はダンが0.369だけで、私はcatboostでブラッシングするほど高くありません)。

Tencent 2020 Advertising Algorithm Competition Address:https : //algo.qq.com/

以前のブログ投稿では、埋め込みベクトルを作成し、ベクトルをDataFrame形式に変換する方法について説明しました。ここをクリックしてください:錬金術の錬金術word2vecを使用して、非定型のNLPフィールドに機能を作成します。

ファーネスをセットアップする前のナンセンス1:実際の操作では、生成されたcreative_idバイナリコーパスが誤って空に書き換えられ、再計算する必要があったため、今回は以前に計算されたad_idの64次元の埋め込みを使用しました。ベクトル(形式はDataFrame)。

ストーブをセットアップする前の2番目のナンセンス:競争が終わっていないため、オフィシャルはベースラインの共有を許可していません。そのため、ここでは、ストーブをセットアップする方法と、gensim埋め込みによって得られたベクトルでlstmを入力するときに注意する必要があるポイントのみを示します。

以下は大まかな炉です(多くの層と調整されたパラメーターは実際の操作よりも省略されています)。

注:コード内のコメントはすべて、私が踏んだ落とし穴です。私のような初心者は、特別な注意を払う必要があります

import numpy as np
import keras
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dense, Dropout,Activation,BatchNormalization
from keras.layers import Embedding
from keras.layers import LSTM

#timesteps*input_dim的值需要等于训练数据特征个数,比如这次是64维
timesteps = 4
input_dim = 16
np_train_set_X = np_train_set_X.reshape((np_train_set_X.shape[0], timesteps, input_dim))

"""
## Build the model
"""
model = Sequential()
#input_shape输入为三维数据(samples,timesteps,input_dim)
#其中samples为训练数据的行数,比如这次是90万条
#再次提醒,timesteps*input_dim的值需要等于训练数据特征个数,比如这次是64维
model.add(LSTM(512,input_shape=(timesteps, input_dim), return_sequences=True, name = 'lstm1'))
model.add(LSTM(units=128, name = 'lstm2'))
model.add(Dense(units=32, activation='relu', name = 'Dense1'))
#输出层,10分类任务,units需要等于分类个数的大小
#输出层,10分类任务,activation选择使用softmax
model.add(Dense(units=10, activation='softmax', name = 'Dense2'))
model.summary()
#由于是10分类,loss选择categorical_crossentropy
model.compile( optimizer="adam",  loss="categorical_crossentropy", metrics=["accuracy"])

my_callbacks = [
    keras.callbacks.EarlyStopping(patience=2),
    keras.callbacks.ModelCheckpoint(filepath='./kerasmodel/model.ad_id.{epoch:04d}-{val_accuracy:.4f}',save_best_only=True, monitor='val_accuracy',mode='auto'),
    keras.callbacks.TensorBoard(log_dir='./kerasmodel/logs/'),
]
#特别需要注意的是np_train_set_X的格式为numpy 的array 格式
#np_train_Y是one-hot后的label,是numpy array格式,比如这次的len(np_train_Y[0])=10
history = model.fit(np_train_set_X, np_train_Y, batch_size=32, epochs=5, validation_split=0.2, shuffle=True, workers=90, use_multiprocessing=True, callbacks=my_callbacks )

最後に、丸薬の鍋を作りました。最高の丸薬は0.369歳で、catboostを使用できるほど高くはありません。幸いなことに、DL LSTMの分類と錬金術の一般的なプロセスがようやくわかり、多くの商品を受け取ったと考えられます。

最後に、サーバーにはGPUがありません。CPUを使用して錬金術を洗練させる場合、恐れているかどうか尋ねます。はは〜幸いなことに、メモリは十分でCPUは​​合格です。エポックは20分以上で実行できます。

おすすめ

転載: blog.csdn.net/lanxuxml/article/details/106791069