2017-06-21 20 views
2

バッチサイズを設定しようとしましたが、フルバッチを使用するのに十分なメモリがないため、オートエンコーダプログラムを実行しようとしました。だから私はtf.train.batchを使ってみました。関数の引数がテンソルなので、np配列をtf.convert_to_tensorでテンソルに変換しようとしました。しかし、メモリは2GBを超え、テンソルに変更できませんでした。ミニバッチでどのように練習できますか? は私のコードです。pythonのテンソルでバッチを分割する

N_img=47000000 
batch_size=100 
X_train = np.zeros(shape=(N_img, Freq_LEN, LOOK_LEN, 1), dtype='float32') 
x = tf.placeholder(tf.float32, [None, FRM_LEN/2,FRM_LEN/2,1]) #FRM_LEN=256 
y = tf.placeholder(tf.float32, [None, FRM_LEN/2,FRM_LEN/2,1]) 
X_train=tf.convert_to_tensor(X_train) 
X_train_batch= tf.train.batch(X_train,batch_size=batch_size) 

print("Start training..") 

for step in range(n_iters): 
    sess.run(optm, feed_dict={x: X_train_batch, y: X_train_batch, keepprob: 0.7}) 
    if step % 100 == 0: 
     print(step,sess.run(cost, feed_dict={x: X_train_batch, y: X_train_batch, keepprob: 1})) 

print("finish training") 

答えて

0

テンソルの引数を必要としないカスタムgenerate_batch関数を作成してみてください(tf.convert_to_tensor操作を回避するため)、例:あなたのバッチがCPUに発生するハンドリング

import numpy as np 
batch_size = 100 

X_train = np.zeros(shape=(N_img, Freq_LEN, LOOK_LEN, 1), dtype='float32') 
y_train = np.zeros(shape=(N_img, Freq_LEN, LOOK_LEN, 1), dtype='float32') 

data_index = 0 

def generate_batch(batch_size): 
    global data_index 
    batch = np.ndarray(shape=(batch_size, Freq_LEN, LOOK_LEN, 1), dtype=np.float32) #the same shapes as train data 
    labels = np.ndarray(shape=(batch_size, Freq_LEN, LOOK_LEN, 1), dtype=np.float32) 
    for i in range(batch_size): 
     batch[i] = X_train[data_index] 
     labels[i] = y_train[data_index] 
     data_index = (data_index + 1) % len(X_train) 
    return batch, labels 

for step in range(n_iters): 
    X_train_batch, X_train_batch = generate_batch(batch_size) 
    sess.run(optm, feed_dict={x: X_train_batch, y: X_train_batch, keepprob: 0.7}) 
    if step % 100 == 0: 
     print(step,sess.run(cost, feed_dict={x: X_train_batch, y: X_train_batch, keepprob: 1})) 
0

フォース:

.... 
with tf.device('/cpu:0'): 
    x = tf.placeholder(tf.float32, [None, FRM_LEN/2,FRM_LEN/2,1]) #FRM_LEN=256 
    y = tf.placeholder(tf.float32, [None, FRM_LEN/2,FRM_LEN/2,1]) 
    X_train=tf.convert_to_tensor(X_train) 
    X_train_batch= tf.train.batch(X_train,batch_size=batch_size) 
print("Start training..") 
.... 
関連する問題