2017-09-05 3 views
0

Ich habe ein Problem mit dem folgenden Codestück, die obs_pattern, und obs_seq_s nicht das erwartete Verhalten zu produzieren. Ich habe es mit TensorFlow 1.2.1 versucht. Ich vermute, dass etwas nicht stimmt.interaktive Sitzung eval und tf.random_uniform produzieren keine erwartete Ausgabe

import tensorflow as tf 

sess = tf.InteractiveSession() 
seq_length = 5 
num_bits = 4 
obs_pattern_shape = [num_bits, seq_length] 
obs_pattern = tf.cast(
    tf.random_uniform(obs_pattern_shape, minval=0, maxval=2, seed=1234, dtype=tf.int32), 
    tf.float32) 
print(obs_pattern.eval()) 
seq_length_zeros = tf.zeros([1, seq_length]) 
obs_seq = tf.concat([obs_pattern, seq_length_zeros], axis=0) 
print(obs_seq.eval()) 
add_vec = tf.one_hot([num_bits], (num_bits + 1), on_value = 1.0, off_value=0.0, axis=0) 
obs_seq_s = tf.concat([obs_seq, add_vec], axis=1) 
print(obs_seq_s.eval()) 

sess.close() 

obs_pattern

[[ 1. 1. 1. 0. 0.] 
[ 0. 0. 0. 1. 0.] 
[ 0. 1. 1. 0. 0.] 
[ 0. 1. 0. 0. 0.]] 

obs_seq

[[ 1. 1. 0. 1. 1.] 
[ 0. 1. 1. 0. 1.] 
[ 1. 1. 1. 0. 0.] 
[ 1. 1. 0. 1. 0.] 
[ 0. 0. 0. 0. 0.]] 

obs_seq_s

[[ 1. 0. 0. 0. 0. 0.] 
[ 0. 0. 1. 0. 0. 0.] 
[ 0. 1. 0. 0. 0. 0.] 
[ 0. 1. 0. 0. 0. 0.] 
[ 0. 0. 0. 0. 0. 1.]] 

EDIT: Basierend auf t er Kommentar unten I obs_pattern geändert und es verhält sich wie ich gedacht hatte

import numpy as np 
arr = np.random.randint(2, size=(num_bits, seq_length)) 
obs_pattern = tf.convert_to_tensor(arr, dtype=tf.float32) 

Antwort

0

Es wird erwartet, dass jedes Mal, wenn sess auf einem Tensor gebildet mit obs_pattern führen Sie es Wiederholungen eine neue zufällige Uniform. Um das erwartete Verhalten zu erhalten, generieren Sie ONCE ein numpy Array mit numpy, dann füttern Sie es zu einem Platzhalter der gleichen Form: obs_pattern. Um zu verdeutlichen, dass Sie einen Seed , aber verwendet haben, haben Sie den Op einige Male ausgeführt, so dass Sie die ersten Iterate der Sequenz erhalten.

+0

süß! Dank dafür – flyingmadden

Verwandte Themen