простая реализация LSTM в tenorflow: рассмотрим приведение элементов к ошибке поддерживаемого типа - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь реализовать простую ячейку LSTM в Tensorflow, чтобы сравнить ее производительность с другой, которую я реализовал ранее.

x = tf.placeholder(tf.float32,[BATCH_SIZE,SEQ_LENGTH,FEATURE_SIZE])
y = tf.placeholder(tf.float32,[BATCH_SIZE,SEQ_LENGTH,FEATURE_SIZE])
weights = { 'out': tf.Variable(tf.random_normal([FEATURE_SIZE, 8 * FEATURE_SIZE, NUM_LAYERS]))}
biases = { 'out': tf.Variable(tf.random_normal([4 * FEATURE_SIZE, NUM_LAYERS]))}

def RNN(x, weights, biases):
    x = tf.unstack(x, SEQ_LENGTH, 1)
    lstm_cell = tf.keras.layers.LSTMCell(NUM_LAYERS)
    outputs = tf.keras.layers.RNN(lstm_cell, x, dtype=tf.float32)
    return outputs

pred = RNN(x, weights, biases)

# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))

Я использовал пример, который нашел на GitHub, и попытался изменить его, чтобы получить желаемое поведение, но я получил это сообщение об ошибке:

TypeError: Failed to convert object of type <class 'tensorflow.python.keras.layers.recurrent.RNN'> to Tensor. Contents: <tensorflow.python.keras.layers.recurrent.RNN object at 0x7fe437248710>. Consider casting elements to a supported type.

1 Ответ

0 голосов
/ 13 апреля 2019

Попробуйте

outputs = tf.keras.layers.RNN(lstm_cell, dtype=tf.float32) (x)

вместо

Вот примеры из документации TF :

    # Let's use this cell in a RNN layer:

    cell = MinimalRNNCell(32)
    x = keras.Input((None, 5))
    layer = RNN(cell)
    y = layer(x)

    # Here's how to use the cell to build a stacked RNN:

    cells = [MinimalRNNCell(32), MinimalRNNCell(64)]
    x = keras.Input((None, 5))
    layer = RNN(cells)
    y = layer(x)
...