У меня проблема с оценкой RNN с использованием API набора данных Tensorflow.
По сути, когда вы используете API набора данных, я не использую feed_dict и заполнители, формулирующие RNN.
Но я продолжаю получать сообщения об ошибках.
Итак, программа выглядит следующим образом:
# creating numpy arrays out of my data
data_x = np.array(x_state,dtype=np.float32)
data_y = np.array(y_var,dtype=np.float32)
num_epochs = 1
num_batch = 80
# from Numpy arrays to Tensors
x_t = tf.convert_to_tensor(data_x, np.float32)
y_t = tf.convert_to_tensor(data_y, np.float32)
# merge the two data sets
dataset = tf.data.Dataset.from_tensor_slices((x_t,y_t))
# batches
dataset = dataset.batch(num_batch)
# repeat the dataset by number of epochs
dataset = dataset.repeat(num_epochs)
sess = tf.Session()
# one-shot iterator
iterator = dataset.make_one_shot_iterator()
x,y = iterator.get_next()
n_steps = num_batch
n_inputs = 1
n_neurons = 100
n_outputs = 1
cell = tf.contrib.rnn.OutputProjectionWrapper(
tf.contrib.rnn.BasicRNNCell(num_units=n_neurons, activation=tf.nn.relu),
output_size=n_outputs)
outputs, states = tf.nn.dynamic_rnn(cell,x, dtype=tf.float32)
learning_rate = 0.001
loss = tf.reduce_mean(tf.square(outputs - y)) # MSE
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
for i in range(num_epochs):
_, loss_value = sess.run([training_op, loss])
print("Epoch: {}, Loss: {:.4f}".format(i, loss_value))
Tensorflow недоволен измерением переменной x, исходящей из одноразового итератора.Я получаю следующую ошибку:
ValueError: Shape (1,?) Должен иметь ранг не менее 3
Я передаю одну переменную x, размер которой равен размеру пакета.А Tensorflow не радует, интересно почему?
Заранее спасибо.Br.