我正在使用 Tensorflow 1.0.0 和 Python 3.5。当我尝试做:
cell = tf.nn.rnn_cell.BasicRNNCell(state_size)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
属性错误
<ipython-input-25-41a20d8458a7> in <module>()
1 # Forward pass
2 print(tf.__version__)
--->3 cell = tf.nn.rnn_cell.BasicRNNCell(state_size)
4 states_series, current_state = tf.nn.dynamic_rnn(cell, inputs_series, initial_state = init_state)
AttributeError: module 'tensorflow.python.ops.nn' has no attribute 'rnn_cell'
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?
machine-learning deep-learning tensorflow recurrent-neural-network
我想在python中构建和训练一个多层LSTM模型(stateIsTuple=True),然后在C++中加载和使用它。但是我很难弄清楚如何在 C++ 中提供和获取状态,主要是因为我没有可以引用的字符串名称。
例如,我将初始状态放在一个命名范围内,例如
with tf.name_scope('rnn_input_state'):
self.initial_state = cell.zero_state(args.batch_size, tf.float32)
Run Code Online (Sandbox Code Playgroud)
这出现在下图中,但是我如何在 C++ 中输入这些内容?
另外,如何在 C++ 中获取当前状态?我在 python 中尝试了下面的图形构造代码,但我不确定这是否正确,因为 last_state 应该是张量元组,而不是单个张量(尽管我可以看到张量板中的 last_state 节点是 2x2x50x128,这听起来像是连接了状态,因为我有 2 层,128 rnn 大小,50 迷你批量大小和 lstm 单元 - 具有 2 个状态向量)。
with tf.name_scope('outputs'):
outputs, last_state = legacy_seq2seq.rnn_decoder(inputs, self.initial_state, cell, loop_function=loop if infer else None)
output = tf.reshape(tf.concat(outputs, 1), [-1, args.rnn_size], name='output')
Run Code Online (Sandbox Code Playgroud)
这就是张量板中的样子
我是否应该连接和拆分状态张量,以便只有一个状态张量进出?或者,还有更好的方法?
PS 理想情况下,该解决方案不会涉及对层数(或 rnn 大小)进行硬编码。所以我可以只有四个字符串 input_node_name、output_node_name、input_state_name、output_state_name,其余的都是从那里派生的。
我正在尝试使用 Python Keras 库中的 LSTM 训练 Seq2Seq 模型。我想使用句子的 TF IDF 向量表示作为模型的输入并收到错误。
X = ["Good morning", "Sweet Dreams", "Stay Awake"]
Y = ["Good morning", "Sweet Dreams", "Stay Awake"]
vectorizer = TfidfVectorizer()
vectorizer.fit(X)
vectorizer.transform(X)
vectorizer.transform(Y)
tfidf_vector_X = vectorizer.transform(X).toarray() #shape - (3,6)
tfidf_vector_Y = vectorizer.transform(Y).toarray() #shape - (3,6)
tfidf_vector_X = tfidf_vector_X[:, :, None] #shape - (3,6,1) since LSTM cells expects ndims = 3
tfidf_vector_Y = tfidf_vector_Y[:, :, None] #shape - (3,6,1)
X_train, X_test, y_train, y_test = train_test_split(tfidf_vector_X, tfidf_vector_Y, test_size = 0.2, random_state = …Run Code Online (Sandbox Code Playgroud) 我在理解堆叠 LSTM 网络中层的输入-输出流时遇到了一些困难。假设我创建了一个堆叠的 LSTM 网络,如下所示:
# parameters
time_steps = 10
features = 2
input_shape = [time_steps, features]
batch_size = 32
# model
model = Sequential()
model.add(LSTM(64, input_shape=input_shape, return_sequences=True))
model.add(LSTM(32,input_shape=input_shape))
Run Code Online (Sandbox Code Playgroud)
我们的堆叠 LSTM 网络由 2 个 LSTM 层组成,分别具有 64 个和 32 个隐藏单元。在这种情况下,我们希望在每个时间步长中,第 1 个 LSTM 层 -LSTM(64)- 将作为输入传递给第 2 个 LSTM 层 -LSTM(32)- 一个大小为 的向量[batch_size, time-step, hidden_unit_length],它表示隐藏状态当前时间步长的第 1 个 LSTM 层。让我困惑的是:
X(t)(作为输入)第一层的隐藏状态 -LSTM(64)- 具有大小[batch_size, time-step, hidden_unit_length]并通过它自己的隐藏网络 - 在这种情况下由 32 个节点组成-?input_shape …在深度学习中,特别是 NLP 中,单词被转换为向量表示,然后输入到 RNN 等神经网络中。通过参考链接:
\n\nhttp://colah.github.io/posts/2014-07-NLP-RNNs-Representations/#Word%20Embeddings
\n\n在Word Embeddings部分,据说:
\n\n\n\n\n词嵌入 W:words\xe2\x86\x92Rn 是一个参数化函数,将某种语言中的单词\n映射到高维向量(可能是 200 到 500 维)
\n
我不明白向量维度的目的。与20 维向量相比, 200 维向量意味着什么?
\n\n它是否提高了模型的整体精度?谁能给我一个关于向量维数选择的简单例子。
\nnlp machine-learning neural-network deep-learning recurrent-neural-network
我知道 LSTM 单元内部有许多 ANN。
但是在为同一问题定义隐藏层时,我看到有些人只使用 1 个 LSTM 单元,而其他人则使用 2、3 个 LSTM 单元,如下所示 -
model = Sequential()
model.add(LSTM(256, input_shape=(n_prev, 1), return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(128, input_shape=(n_prev, 1), return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(64, input_shape=(n_prev, 1), return_sequences=False))
model.add(Dropout(0.3))
model.add(Dense(1))
model.add(Activation('linear'))
Run Code Online (Sandbox Code Playgroud)
我有一个时间序列预测问题,正在构建一个如下所示的 LSTM:
def create_model():
model = Sequential()
model.add(LSTM(50,kernel_regularizer=l2(0.01), recurrent_regularizer=l2(0.01), bias_regularizer=l2(0.01), input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dropout(0.591))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
Run Code Online (Sandbox Code Playgroud)
当我在 5 个分割上训练模型时,如下所示:
tss = TimeSeriesSplit(n_splits = 5)
X = data.drop(labels=['target_prediction'], axis=1)
y = data['target_prediction']
for train_index, test_index in tss.split(X):
train_X, test_X = X.iloc[train_index, :].values, X.iloc[test_index,:].values
train_y, test_y = y.iloc[train_index].values, y.iloc[test_index].values
model=create_model()
history = model.fit(train_X, train_y, epochs=10, batch_size=64,validation_data=(test_X, test_y), verbose=0, shuffle=False)
Run Code Online (Sandbox Code Playgroud)
我不确定为什么在我的 Keras 模型中使用正则化器时会出现过度拟合。任何帮助表示赞赏。
编辑: 尝试架构
def create_model():
model = Sequential()
model.add(LSTM(20, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
def create_model(x,y): …Run Code Online (Sandbox Code Playgroud) I am going through a Binary Classification tutorial using PyTorch and here, the last layer of the network is torch.Linear() with just one neuron. (Makes Sense) which will give us a single neuron. as pred=network(input_batch)
After that the choice of Loss function is loss_fn=BCEWithLogitsLoss() (which is numerically stable than using the softmax first and then calculating loss) which will apply Softmax function to the output of last layer to give us a probability. so after that, it'll calculate the binary …
neural-network deep-learning recurrent-neural-network pytorch
训练RNN和简单神经网络有什么区别?RNN能否使用前馈和后退方法进行训练?
谢谢!
machine-learning neural-network deep-learning recurrent-neural-network