1、word_tokenizer = tokenizer(max_word_nums) max_word_nums設定詞典的最大值,為乙個int型數值
2、word_tokenizer.fit_on_texts(question_data["words"]) 解釋:fit_on_texts(texts)使用一系列文件來生成token詞典,texts為list類,每個元素為乙個文件。但是在這裡直接傳入了乙個 pandas.series的型別,也是可以用的。
3、 word_embedding_data = np.concatenate(
(np.zeros(shape=(1, word_embedding_data.shape[1]), dtype=np.float64),
word_embedding_data.loc[list(word_tokenizer.word_index.keys())[:max_word_nums]].values
),axis=0
) 解釋:np.zeros(shape=(1, word_embedding_data.shape[1]), dtype=np.float64), 生成乙個形狀為[1,word_embedding_data第二維大小的向量,即每行維度的大小,即多少列]
word_embedding_data.loc[list(word_tokenizer.word_index.keys())[:max_word_nums]].values word_index 乙個dict,儲存所有word對應的編號id,從1開始. 只獲取【0~10000】鍵值,其中排序方式是按照詞頻降序排列的,原始資料中共有words兩萬多個,但是這裡只取了最常出現的一萬個。最後得到的是word的list,然後用loc定位到這些word,得到乙個dataframe,最後用values,獲得word的編碼值。
4、word_input1 = input(shape=(word_seq_len,), dtype="int32") 解釋:input(shape=none,batch_shape=none,name=none,dtype=k.floatx(),sparse=false,tensor=none),用來例項化乙個keras張量,shape: 形狀元組(整型),不包括batch size。for instance, shape=(32,) 表示了預期的輸入將是一批32維的向量。
5、embedding_layer = embedding(
input_dim=word_embedding_data.shape[0],
output_dim=word_embedding_data.shape[1],
weights=[word_embedding_data],
input_length=word_seq_len,
trainable=false
解釋:這裡的input_dim和output_dim分別是矩陣w的行數和列數,weights就是權重矩陣w,input_length是句子長度的上限,trainable=false是因為詞向量是已經訓練完的,所以不要在訓練 了,,input_length:當輸入序列的長度固定時,該值為其長度。如果要在該層後接flatten層,然後接dense層,則必須指定該引數,否則dense層的輸出維度無法自動推斷。
嵌入層將正整數(下標)轉換為具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]
6、diff = lambda(lambda x: k.abs(x[0] - x[1]))([merge_a, merge_b])
mult = lambda(lambda x: x[0] * x[1])([merge_a, merge_b])
這兩個函式非常有意思,首先lambda()是keras提供的函式,本函式用以對上一層的輸出施以任何theano/tensorflow表示式
k.abs() 逐元素絕對值
([merge_a, merge_b]) 應該是匿名函式的一種呼叫方式,直接跟在lambda後面即可。
7、model = model(
inputs = [word_input1, word_input2],
outputs = pred
) model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["acc"]
)解釋:
8、early_stop = earlystopping("val_loss", patience=10)
9、check_point = modelcheckpoint("./log/%s.cnn..hdf5" % (datetime.now().strftime("%y%m%d-%h%m%s")),
monitor="val_loss",
s**e_best_only=true,
s**e_weights_only=true
)解釋:該**函式將在每個epoch後儲存模型到filepath
filepath
可以是格式化的字串,裡面的佔位符將會被epoch
值和傳入on_epoch_end
的logs
關鍵字所填入
例如,filepath
若為weights.}.hdf5
,則會生成對應epoch和驗證集loss的多個檔案。
10、model_res = model.fit(
x=[train_word1, train_word2],
y=train_y,
batch_size=batch_size,
epochs=num_epoches,
validation_data=([dev_word1, dev_word2], dev_y),
shuffle=true,
callbacks=[early_stop, check_point]
)解釋:
本函式將模型訓練nb_epoch
輪,其引數有:
fit
函式返回乙個history
的物件,其history.history
屬性記錄了損失函式和其他指標的數值隨epoch變化的情況,如果有驗證集的話,也包含了驗證集的這些指標變化情況
11、test_pred = model.predict([test_word1, test_word2], batch_size=batch_size)
解釋:
predict(self, x, batch_size=32, verbose=0)
本函式按batch獲得輸入資料對應的輸出,其引數有:
函式的返回值是**值的numpy array
和路徑相關的API
需要標頭檔案 shlwapi.h bool pathfileexists lpctstr lpszpath 功能 檢查檔案 路徑是否存在 lptstr pathfindfilename lpctstr ppath 功能 獲得路徑中的檔名 例如 pathfilefilename c program f...
C C 路徑相關的API
1.加不加都一樣,就是指當前目錄 2.表示當前目錄的上級目錄,即當前的父目錄。這裡的當前目錄就是指.vcxproj和當前執行的.cpp檔案所在目錄,而不是.sln檔案所在目錄 注意 前面兩種在工程資料夾裡面執行時沒有問題的,但是打包成dll,被呼叫就行不通了 3.獲取當前執行檔案的路徑 不包括檔名 ...
任務相關的API函式 eTaskGetState
etaskgetstate 此函式用於查詢某個任務的執行狀態,比如 執行態,阻塞態,掛起態,就緒態等,返回值是個列舉型別.要使用函式巨集include etaskgetstate必須為1,此巨集在freertos.h 第202行 v9.0 函式原型如下 etaskstate etaskgetstat...