簡體   English   中英

使用Tensorflow估算器和中心創建暹羅網絡

[英]Creating siamese network with tensorflow estimator and hub

我試圖通過使用編碼器創建一個暹羅網絡來微調通用句子編碼器。 我想在訓練過程中訓練tensorflow_hub通用編碼器模塊的權重,但是我不確定如何使用估計器來做到這一點。

我的問題是,如果在下面的設置中使用兩個hub.text_embedding_column,它將訓練兩個單獨的網絡,而不是像暹羅網絡一樣訓練它們。 如果不共享權重,我將如何更改權重,以便共享和訓練權重。 如果有幫助,我可以從本地計算機加載模塊。

def train_and_evaluate_with_module(hub_module, train_module=False):
    embedded_text_feature_column1 = hub.text_embedding_column(
      key="sentence1", module_spec=hub_module, trainable=train_module)

    embedded_text_feature_column2 = hub.text_embedding_column(
      key="sentence2", module_spec=hub_module, trainable=train_module)


    estimator = tf.estimator.DNNClassifier(
      hidden_units=[500, 100],
      feature_columns=[embedded_text_feature_column1,embedded_text_feature_column2],
      n_classes=2,
      optimizer=tf.train.AdagradOptimizer(learning_rate=0.003))

    estimator.train(input_fn=train_input_fn, steps=1000)

    train_eval_result = estimator.evaluate(input_fn=predict_train_input_fn)
    test_eval_result = estimator.evaluate(input_fn=predict_test_input_fn)

    training_set_accuracy = train_eval_result["accuracy"]
    test_set_accuracy = test_eval_result["accuracy"]

    return {
      "Training accuracy": training_set_accuracy,
      "Test accuracy": test_set_accuracy
    }



results  = train_and_evaluate_with_module("https://tfhub.dev/google/universal-sentence-encoder-large/3", True)

我對如何使用tf.estimator不太熟悉,但是當涉及到暹羅式體系結構時,這就足夠了:

sentences1 = ["the cat sat on the mat", "the cat didn't sat on the mat"]
sentences2 = ["the dog sat on the mat", "the dog didn't sat on the mat"]
encoder = hub.Module("https://tfhub.dev/google/universal-sentence-encoder-large/3", trainable=True)
sentences1_embedding = encoder(sentences1)
sentences2_embedding = encoder(sentences2)
# Now, you can proceed with doing whatever you want with the embeddings

然后,當您計算損耗並反向傳播梯度時,將在模型的兩個分支中更新universal-sentence-encoder

換句話說,創建模塊的一個實例,並使用它從兩個或多個句子→暹羅神經網絡中獲取嵌入。


對於您而言,我認為以下內容就足夠了:

embedded_text_feature_column = hub.text_embedding_column(
  key="sentence", module_spec=hub_module, trainable=train_module)

estimator = tf.estimator.DNNClassifier(
  hidden_units=[500, 100],
  feature_columns=[embedded_text_feature_column, embedded_text_feature_column],
  n_classes=2,
  optimizer=tf.train.AdagradOptimizer(learning_rate=0.003))

因此,您text_embedding_column使用一個module實例化一個text_embedding_column ,然后使用相同的text_embedding_column將兩個功能列都嵌入到tf.estimator.DNNClassifier

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM