TensorflowグラフをESSISTOTER APIの使用に変換する方法 -- python フィールド と tensorflow フィールド 関連 問題

How to convert a tensorflow Graph into using the Estimator API












0
vote

問題

日本語

テンソルフローコードを見積もりAPI

の使用に変換しようとしていることを少し停止しています。

マイグラフは

を下回っています <事前> <コード> batch_size = 1024 embedding_size = 500 # 2^8 Dimension of the embedding vector. Crashed at 158 for Embed size 2656016. So possible values are 154-157. Possible choices 154, 156 num_inputs =5 num_sampled = 128 # Number of negative examples to sample. graph = tf.Graph() with graph.as_default(): train_dataset = tf.placeholder(tf.int32, shape=[batch_size, num_inputs ]) train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1]) epochCount = tf.get_variable( 'epochCount', initializer= 0) #to store epoch count to total # of epochs are known update_epoch = tf.assign(epochCount, epochCount + 1) embeddings = tf.get_variable( 'embeddings', dtype=tf.float32, initializer= tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0, dtype=tf.float32) ) softmax_weights = tf.get_variable( 'softmax_weights', dtype=tf.float32, initializer= tf.truncated_normal([vocabulary_size, embedding_size], stddev=1.0 / math.sqrt(embedding_size), dtype=tf.float32 ) ) softmax_biases = tf.get_variable('softmax_biases', dtype=tf.float32, initializer= tf.zeros([vocabulary_size], dtype=tf.float32), trainable=False ) embed = tf.nn.embedding_lookup(embeddings, train_dataset) #train data set is embed_reshaped = tf.reshape( embed, [batch_size*num_inputs, embedding_size] ) segments= np.arange(batch_size).repeat(num_inputs) averaged_embeds = tf.segment_mean(embed_reshaped, segments, name=None) loss = tf.reduce_mean( tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=averaged_embeds, sampled_values=tf.nn.uniform_candidate_sampler(true_classes=tf.cast(train_labels, tf.int64), num_sampled=num_sampled, num_true=1, unique=True, range_max=vocabulary_size, seed=None), labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size)) optimizer = tf.train.AdagradOptimizer(1.0).minimize(loss) saver = tf.train.Saver()

ここに公式推定ガイドを読んでいます

https://www.tensorflow.org/api_docs/python/tf. /推定器/推定器

私のことをすることについての最善の解釈私は自分のグラフを関数に変換する必要があるということですか?それを model_fn

に設定します。

'params'は私の埋め込みとソフトマックスの重みです。だから私はここでこれらの変数を明示的に名前を付けますか?

編集:

Sorinからの回答のおかげで、これはこれをTF.Stimator

の使用を使用することを試みました。

これはデータのバッチを生成するために使用された関数です。

data_index = 0 epoch_index = 0 RECEPOCH_INDEXA = 0#モデルをモデルに保存するのを助けるために使用されています

<事前> <コード> def generate_batch(batch_size, inputCount): #batch size = number of labels #inputCount = number of inputs per label global data_index, epoch_index batch = np.ndarray(shape=(batch_size, inputCount), dtype=np.int32) labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32) #Begin New stuff n=0 while n < batch_size: if len( set(my_data[data_index, 1]) ) >= inputCount: labels[n,0] = my_data[data_index, 0] batch[n] = random.sample( set(my_data[data_index, 1]), inputCount) n = n+1 data_index = (data_index + 1) % len(my_data) #may have to do something like len my_data[:] if data_index == 0: epoch_index = epoch_index + 1 print('Completed %d Epochs' % epoch_index) else: data_index = (data_index + 1) % len(my_data) if data_index == 0: epoch_index = epoch_index + 1 print('Completed %d Epochs' % epoch_index) return batch, labels

これは私がモデル関数を定義する場所です。私は場所の保有者をコメントアウトし、電車のデータと電車のラベルを入力として訓練する

<事前> <コード> def my_model( train_dataset, train_labels): # train_dataset = tf.placeholder(tf.int32, shape=[batch_size, num_inputs ]) # train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1]) epochCount = tf.get_variable( 'epochCount', initializer= 0) #to store epoch count to total # of epochs are known update_epoch = tf.assign(epochCount, epochCount + 1) embeddings = tf.get_variable( 'embeddings', dtype=tf.float32, initializer= tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0, dtype=tf.float32) ) softmax_weights = tf.get_variable( 'softmax_weights', dtype=tf.float32, initializer= tf.truncated_normal([vocabulary_size, embedding_size], stddev=1.0 / math.sqrt(embedding_size), dtype=tf.float32 ) ) softmax_biases = tf.get_variable('softmax_biases', dtype=tf.float32, initializer= tf.zeros([vocabulary_size], dtype=tf.float32), trainable=False ) embed = tf.nn.embedding_lookup(embeddings, train_dataset) #train data set is embed_reshaped = tf.reshape( embed, [batch_size*num_inputs, embedding_size] ) segments= np.arange(batch_size).repeat(num_inputs) averaged_embeds = tf.segment_mean(embed_reshaped, segments, name=None) loss = tf.reduce_mean( tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=averaged_embeds, sampled_values=tf.nn.uniform_candidate_sampler(true_classes=tf.cast(train_labels, tf.int64), num_sampled=num_sampled, num_true=1, unique=True, range_max=vocabulary_size, seed=None), labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size)) optimizer = tf.train.AdagradOptimizer(1.0).minimize(loss) saver = tf.train.Saver()

これは私が見積もり

を定義する場所です <事前> <コード> #Define the estimator word2vecEstimator = tf.estimator.Estimator( model_fn=my_model, params={ 'batch_size': 1024, 'embedding_size': 50, 'num_inputs': 5, 'num_sampled':128 })

これは私が推定者に訓練するように言う場所です

<事前> <コード> #Train with Estimator word2vecEstimator.train( input_fn=lambda:iris_data.generate_batch(batch_size, num_inputs), steps=1000)

これは正しいようですか?

また、一定のステップの後、チェックポイントを保存してGoogleドライブにアップロードします。私はそのコードをどのようにするか/どこで行うか疑問に思いました。

英語

I'm a little stuck on trying to convert my tensorflow code into using the Estimator API

My graph is below

batch_size = 1024  embedding_size = 500 # 2^8 Dimension of the embedding vector. Crashed at 158 for Embed size 2656016. So possible values are 154-157. Possible choices 154, 156 num_inputs =5  num_sampled = 128 # Number of negative examples to sample.  graph = tf.Graph()  with graph.as_default():       train_dataset = tf.placeholder(tf.int32, shape=[batch_size, num_inputs ])     train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])      epochCount = tf.get_variable( 'epochCount', initializer= 0) #to store epoch count to total # of epochs are known     update_epoch = tf.assign(epochCount, epochCount + 1)      embeddings = tf.get_variable( 'embeddings', dtype=tf.float32,         initializer= tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0, dtype=tf.float32) )      softmax_weights = tf.get_variable( 'softmax_weights', dtype=tf.float32,         initializer= tf.truncated_normal([vocabulary_size, embedding_size],                              stddev=1.0 / math.sqrt(embedding_size), dtype=tf.float32 ) )      softmax_biases = tf.get_variable('softmax_biases', dtype=tf.float32,         initializer= tf.zeros([vocabulary_size], dtype=tf.float32),  trainable=False )      embed = tf.nn.embedding_lookup(embeddings, train_dataset) #train data set is      embed_reshaped = tf.reshape( embed, [batch_size*num_inputs, embedding_size] )      segments= np.arange(batch_size).repeat(num_inputs)      averaged_embeds = tf.segment_mean(embed_reshaped, segments, name=None)      loss = tf.reduce_mean(         tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=averaged_embeds,                                     sampled_values=tf.nn.uniform_candidate_sampler(true_classes=tf.cast(train_labels, tf.int64), num_sampled=num_sampled, num_true=1, unique=True, range_max=vocabulary_size, seed=None),                                    labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))       optimizer = tf.train.AdagradOptimizer(1.0).minimize(loss)       saver = tf.train.Saver() 

I'm reading the official Estimator guide here

https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator

My best interpretation on what to do is that I have to convert my graph into a function? And set that to model_fn?

'params' are the my embeddings and softmax weights. So do I explicitly name these variables here?

Edit:

Thanks to answers from Sorin, this is my attempt at converting this to using TF.Estimator

This is the function I used to generate batches of data.

data_index = 0 epoch_index = 0 recEpoch_indexA = 0 #Used to help keep store of the total number of epoches with the models

def generate_batch(batch_size, inputCount): #batch size = number of labels   #inputCount = number of inputs per label     global data_index, epoch_index      batch = np.ndarray(shape=(batch_size, inputCount), dtype=np.int32)      labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)      #Begin New stuff      n=0     while n < batch_size:       if len(    set(my_data[data_index, 1])   ) >= inputCount:         labels[n,0] = my_data[data_index, 0]         batch[n] = random.sample( set(my_data[data_index, 1]),  inputCount)         n = n+1         data_index = (data_index + 1) % len(my_data) #may have to do something like len my_data[:]         if data_index == 0:           epoch_index = epoch_index + 1           print('Completed %d Epochs' % epoch_index)       else:         data_index = (data_index + 1) % len(my_data)         if data_index == 0:           epoch_index = epoch_index + 1           print('Completed %d Epochs' % epoch_index)      return batch, labels      

This is where I define my model function. I commented out the place holders and put in the train data and train labels as the input

def my_model( train_dataset, train_labels):  #     train_dataset = tf.placeholder(tf.int32, shape=[batch_size, num_inputs ]) #     train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])      epochCount = tf.get_variable( 'epochCount', initializer= 0) #to store epoch count to total # of epochs are known     update_epoch = tf.assign(epochCount, epochCount + 1)      embeddings = tf.get_variable( 'embeddings', dtype=tf.float32,         initializer= tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0, dtype=tf.float32) )      softmax_weights = tf.get_variable( 'softmax_weights', dtype=tf.float32,         initializer= tf.truncated_normal([vocabulary_size, embedding_size],                              stddev=1.0 / math.sqrt(embedding_size), dtype=tf.float32 ) )      softmax_biases = tf.get_variable('softmax_biases', dtype=tf.float32,         initializer= tf.zeros([vocabulary_size], dtype=tf.float32),  trainable=False )      embed = tf.nn.embedding_lookup(embeddings, train_dataset) #train data set is      embed_reshaped = tf.reshape( embed, [batch_size*num_inputs, embedding_size] )      segments= np.arange(batch_size).repeat(num_inputs)      averaged_embeds = tf.segment_mean(embed_reshaped, segments, name=None)      loss = tf.reduce_mean(         tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=averaged_embeds,                                     sampled_values=tf.nn.uniform_candidate_sampler(true_classes=tf.cast(train_labels, tf.int64), num_sampled=num_sampled, num_true=1, unique=True, range_max=vocabulary_size, seed=None),                                    labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))       optimizer = tf.train.AdagradOptimizer(1.0).minimize(loss)       saver = tf.train.Saver() 

This is where I define the Estimator

#Define the estimator word2vecEstimator = tf.estimator.Estimator(         model_fn=my_model,         params={             'batch_size': 1024,             'embedding_size': 50,             'num_inputs': 5,             'num_sampled':128         }) 

This is where I tell the Estimator to train

#Train with Estimator word2vecEstimator.train(     input_fn=lambda:iris_data.generate_batch(batch_size, num_inputs),     steps=1000) 

Does this seem right?

Also, after a certain amount of steps, I would like to save the checkpoint and upload it to my google drive. I was wondering how/where I would place the code to do that.

</div
     

回答リスト

1
 
vote
vote
ベストアンサー
 

正しい、model_fnは行く方法です。

Paramsは他のものよりも誇張計画です。あなたがモデルに保つべきです(そのように)モデルに保管する必要があります。

あなたの新しい関数にプレースホルダーを持ってはいけません。彼らは機能とラベルを介して来ます。

視聴するのは、同じ機能が予測、訓練、評価について照会されていることです。 MODEパラメータを使用して区別します。これは、予測を行うとラベルがないことを意味します。そのため、その場合コードが正しく機能することを確認してください。

 

You are right, model_fn is the way to go.

Params is more about hyperparameters than anything else. Any variable you have you should keep in the model(as it is).

You shouldn't have any placeholders in your new function. They come via the features and labels.

One thing to watch for is that the same function is callled for predictions, training and evaluation. Use the mode parameter to distinguish. This also means label is None when you do predictions, so make sure the code works correctly in that case.

</div
 
 
   
   

関連する質問

0  ValueErrorのログとラベルは同じ形状(?、10)VS(2,2、?、10)を持つ必要があります。  ( Valueerror logits and labels must have the same shape 10 vs 2 2 10 ) 
2つのLSTMセルを使用して単純なニューラルネットワークを更新したい。 古いアーキテクチャ(それが機能しました):入力=&gt; rnn =&gt。出力 新しいアーキテクチャ(値エラー付き):入力=&gt; LSTM =&gt; LSTM =&gt;出力 <...

0  TensorflowフックAfter_RUNが呼び出されません  ( Tensorflow hook after run not called ) 
だから私はこのグーグルからの例を見ています。 Monitoredessessionを利用して、Nステップごとに要約を保存するための本当に便利なクラスのようです。 DOCによると、次のスニペット: <事前> <コード> with tf.train.Mon...

3  KERAS起動時間(_MAKE_TRAIN_FUNCTION())は、Tesla V100-SXM2-16GB GPUが非常に遅くなり、強力なGPUと比較して  ( Keras startup time make train function very slow on tesla v100 sxm2 16gb gp ) 
フォローアップ: GPUマシンでTensorflowを持つKeras - 一部の部分は非常に遅い Tensorflow 1.4 からのmnist_cnn.py(少し変更 - 主にロギングを追加) 実行中のプリビルトドッカーイメージを使用して行われました:...

0  Tensorを形状に割り当てる際のOOM [1,48,48,1024]とタイプFLOAT:LOCALHOST / REPLICA:0 /タスク:0 /デバイス:GPU:0 Allocator GPU_0_BFC  ( Oom when allocating tensor with shape1 48 48 1024 and type float on joblocal ) 
次のリポジトリのマスクRCNNのトレーニングを再現しようとしています。 HTTPS: //github.com/maxkferg/metal-defect-detection 列車のコードスニペットは次のとおりです。 <事前> <コード> ...

1  Tensorflowオブジェクト検出訓練されたモデルが働いていません  ( Tensorflow object detection trained model not working ) 
私はSSDとより速いR-CNNモデルの両方を使用してTensorFlowオブジェクト検出のためにデータセットを訓練しました。私のデータセット内の220の電車と30のテストイメージがありました。 私はビデオで私の訓練を受けたモデルをテストしたときに私がビデオ内の...

1  valueError:サイズ1048576の整列を形にして説明することはできません(1024,1024,3)  ( Valueerror cannot reshape array of size 1048576 into shape 1024 1024 3 ) 
以下は.ipynbファイルからのコードスニペットです。 <事前> <コード> for image_path in TEST_IMAGE_PATHS: print(image_path) image = Image.open(image_path)...

9  KERASで行列乗算を実装する方法  ( How to implement a matrix multiplication in keras ) 
Matrix Xを指定した関数を実装したいだけで、単純な行列乗算であるx(x ^ t * x)の共分散行列を返します。 テンショローの中では、それは簡単になるつもりです:tf.matmul(x、tf.transpose(x)) しかし、私はそれがケーラスとの...

5  Tensorflowでマルチクラスヒンジ損失を実装する方法  ( How to implement multi class hinge loss in tensorflow ) 
テンソルフローでマルチクラスヒンジ損失を実装したいです。製剤は以下の通りである: 予測が正しいときに2番目の最大予測確率を得ることは困難です。 TF.NN.TOP_Kを使用して計算しようとしましたが、残念ながらTF.NN.TOP_Kはグラデーション操作を...

2  複数のデータセットにKerasのFIT_GENERATORを正しく実装する方法  ( How to correctly implement kerass fit generator on multiple datasets ) 
KerasのFIT_GENERATOR関数を実装するという問題があります。私はKerasのマニュアルと他の数多くのドキュメンテーションをオンラインで続いています。しかし、私はこのことがうまくいくように見えないようです。 FIT_GENERATORを実行す...

0  Kerasでのトレーニング中にテンソルの値を記録する方法  ( How to record the values of a tensor during training in keras ) 
カスタマイズされたレイヤーは、カスタマイズされたレイヤーがあり、トレーニング中に特定のテンソルを監視したい(すなわち、エポックあたりのこのテンソルを評価し、その値をリストに記録する)。これを達成するために何をすべきですか? 例としてのコードの一部: <事前> ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有