【发布时间】:2017-07-25 09:28:25
【问题描述】:
我最近开始研究深度学习,并且对我对 RNN 和 LSTM 的理论和深入实际实现的理解充满信心。我编写了一个非常简单的 RNN,它学习将两个二进制数相加,仅使用 numpy。我现在正在尝试熟悉 TensorFlow API,以便不再需要从头开始构建模型。
尽管我对自己对神经网络的理解和编程能力充满信心,但在理解 TensorFlow 抽象模型的高层次以及应该如何使用数据时,我一直在碰壁,这让我感到非常沮丧。结构化的。我撞到的墙的一个例子是在下面的代码中,我试图实现一个简单的 RNN,它接收一个列表/整数序列的列表,然后将学习如何将单个序列分类为增加或减少. generate_data() 输出两个列表:
-
data是[[1, 2, 3], [9, 8, 7]]的形式,是输入序列。 -
labels是1s 或0s 的列表 - 1 表示相应的序列正在增加,0 表示减少。
x 是输入序列的占位符,y 是相应标签的占位符。我的思考过程是让 RNN 以x 接收每个输入序列,这是一个单列张量,每行是序列的一个整数——展开的 RNN 中的一个时间步长。然后,RNN 将在 RNN 的每次完全前向传播之后(在处理完一个完整的 x 张量之后)输出一个整数(0 或 1)。
我收到一个错误,在最后一行输入必须是一个序列。我无法理解这个单列张量如何不被视为一个序列,以及它需要如何塑造才能成为一个序列。
作为旁注,我的下一个最大误解是,在我读过的所有关于 RNN 的理论解释中,有 3 个加权矩阵——一个从输入到隐藏状态,一个从隐藏状态到输出,一个介于两者之间每个时间步的隐藏状态。我使用 TensorFlow 看到的所有编码示例似乎都只有一个加权矩阵。这是怎么回事? TensorFlow 如何使用这个单一矩阵作为 3 个深层矩阵的抽象?我是否在W = tf.Variable(tf.random_normal([sequence_len, output_dim])) 行中正确地塑造了这个矩阵?
from __future__ import print_function
import tensorflow as tf
from tensorflow.contrib import rnn
import random
sequence_len = 5 # Input Dimension
max_num = 1000 # Must be >= than (sequence_len - 1)
output_dim = 1
hidden_dim = 16
batch_size = 1000
def generate_data(sample_size, seq_len=sequence_len, max = max_num):
data = []
labels = []
for _ in range(sample_size):
type = (1 if random.random() < 0.5 else 0)
temp = []
if type == 1:
labels.append(1)
temp.append(random.randint(0, max_num - seq_len + 1))
for i in range(1, seq_len):
temp.append(random.randint(temp[i - 1] + 1, max_num - seq_len + i + 1))
data.append(temp)
if type == 0:
labels.append(0)
temp.append(random.randint(0 + seq_len - 1, max_num))
for i in range(1, seq_len):
temp.append(random.randint( 0 + seq_len - i - 1, temp[i - 1] - 1))
data.append(temp)
return data, labels
input_data, labels = generate_data(100000)
x = tf.placeholder(tf.int32, [None, sequence_len])
y = tf.placeholder(tf.int32, [None, output_dim])
W = tf.Variable(tf.random_normal([sequence_len, output_dim]))
b = tf.Variable(tf.random_normal([output_dim]))
cell = rnn.BasicRNNCell(hidden_dim)
outputs, states = tf.nn.static_rnn(cell, x, dtype=tf.int32)
【问题讨论】:
标签: python tensorflow neural-network deep-learning recurrent-neural-network