1

這是我第一次使用張量板,因爲我得到一個奇怪的錯誤爲我的圖。張量流和張量板的黑暗奧祕在訓練中使用交叉驗證。奇怪的圖表顯示

這是我得到的,如果我打開'STEP'窗口。 This it what I get if I open up the 'STEP' window.

但是,這是我得到的,如果我打開'相對'。 (打開'WALL'窗口時相似)。 RELATIVE window

除此之外,爲了測試模型的性能,我每隔幾個步驟應用交叉驗證。這種交叉驗證的準確性從約10%(隨機猜測)下降到一段時間後的0%。我不確定我犯了什麼錯誤,因爲我不是張力流專家,但我懷疑我的問題是在圖形構建中。代碼如下所示:

def initialize_parameters(): 
    global_step = tf.get_variable("global_step", shape=[], trainable=False, 
      initializer=tf.constant_initializer(1), dtype=tf.int64) 

    Weights = { 
     "W_Conv1": tf.get_variable("W_Conv1", shape=[3, 3, 1, 64], 
      initializer=tf.random_normal_initializer(mean=0.00, stddev=0.01), 
     ), 
... 
     "W_Affine3": tf.get_variable("W_Affine3", shape=[128, 10], 
      initializer=tf.random_normal_initializer(mean=0.00, stddev=0.01), 
    ) 
} 
    Bias = { 
     "b_Conv1": tf.get_variable("b_Conv1", shape=[1, 16, 8, 64], 
      initializer=tf.random_normal_initializer(mean=0.00, stddev=0.01), 
     ), 
... 
     "b_Affine3": tf.get_variable("b_Affine3", shape=[1, 10], 
      initializer=tf.random_normal_initializer(mean=0.00, stddev=0.01), 
    ) 
} 
    return Weights, Bias, global_step 


def build_model(W, b, global_step): 

    keep_prob = tf.placeholder(tf.float32) 
    learning_rate = tf.placeholder(tf.float32) 
    is_training = tf.placeholder(tf.bool) 

    ## 0.Layer: Input 
    X_input = tf.placeholder(shape=[None, 16, 8], dtype=tf.float32, name="X_input") 
    y_input = tf.placeholder(shape=[None, 10], dtype=tf.int8, name="y_input") 

    inputs = tf.reshape(X_input, (-1, 16, 8, 1)) #must be a 4D input into the CNN layer 
    inputs = tf.contrib.layers.batch_norm(
         inputs, 
         center=False, 
         scale=False, 
         is_training=is_training 
        ) 

    ## 1. Layer: Conv1 (64, stride=1, 3x3) 
    inputs = layer_conv(inputs, W['W_Conv1'], b['b_Conv1'], is_training) 
... 

    ## 7. Layer: Affine 3 (128 units) 
    logits = layer_affine(inputs, W['W_Affine3'], b['b_Affine3'], is_training) 

    ## 8. Layer: Softmax, or loss otherwise 
    predict = tf.nn.softmax(logits) #should be an argmax, or should this even go through 


    ## Output: Loss functions and model trainers 
    loss = tf.reduce_mean(
       tf.nn.softmax_cross_entropy_with_logits( 
         labels=y_input, 
         logits=logits 
       ) 
      ) 
    trainer = tf.train.GradientDescentOptimizer(
       learning_rate=learning_rate 
      ) 
    updateModel = trainer.minimize(loss, global_step=global_step) 

    ## Test Accuracy 
    correct_pred = tf.equal(tf.argmax(y_input, 1), tf.argmax(predict, 1)) 
    acc_op = tf.reduce_mean(tf.cast(correct_pred, "float")) 

return X_input, y_input, loss, predict, updateModel, keep_prob, learning_rate, is_training 

現在我懷疑我的錯誤是在圖表的損失函數的定義,但我不知道。任何想法可能是什麼問題?或者模型是否正確收斂,並預期所有這些錯誤?

回答

1

是的我認爲你在交叉驗證實現中多次運行相同的模型。 只需在每個循環的末尾嘗試

session.close() 
1

我懷疑你正在得到這樣奇怪的輸出(我也見過類似的東西),因爲你多次運行相同的模型,它將Tensorboard輸出保存在完全相同的地方。我在代碼中看不到你如何命名文件的輸出?儘量使這部分的代碼,唯一的文件路徑:

`summary_writer = tf.summary.FileWriter(unique_path_to_log, sess.graph)` 

您也可以嘗試尋找您現有的輸出具有好處投入,並嘗試目錄中刪除具有舊的(或更新的文件嗎? )時間戳和這種方式Tensorboard不會混淆使用哪一個。

相關問題