我有一个简单的数据框,由一列组成.在该列中有10320个观测值(数值).我正在通过将数据插入到具有每个200个观测值的窗口的图中来模拟时间序列数据.这是绘图的代码.
import matplotlib.pyplot as plt
from IPython import display
fig_size = plt.rcParams["figure.figsize"]
import time
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
fig, axes = plt.subplots(1,1, figsize=(19,5))
df = dframe.set_index(arange(0,len(dframe)))
std = dframe[0].std() * 6
window = 200
iterations = int(len(dframe)/window)
i = 0
dframe = dframe.set_index(arange(0,len(dframe)))
while i< iterations:
frm = window*i
if i == iterations:
to = len(dframe)
else:
to = frm+window
df = dframe[frm : to]
if len(df) > 100:
df = df.set_index(arange(0,len(df)))
plt.gca().cla()
plt.plot(df.index, df[0])
plt.axhline(y=std, xmin=0, xmax=len(df[0]),c='gray',linestyle='--',lw …Run Code Online (Sandbox Code Playgroud) 我已经看到有关神经网络不同部分的丢失的描述:
重量矩阵中的丢失,
在矩阵乘法之后和relu之前隐藏层中的丢失,
relu后隐藏层中的丢失,
并且在softmax函数之前输出分数中的丢失
我对应该在哪里执行辍学感到有点困惑.有人可以帮忙详细说明吗?谢谢!
neural-network conv-neural-network recurrent-neural-network dropout
我正在尝试编写序列以在keras中对RNN进行排序.我使用我从网上理解的内容编写了这个程序.我首先表征然后将文本转换的文本成序列和填充,以形成特征变量X.获得目标变量Y,首先将x向左移动然后填充它.最后,我将我的功能和目标变量提供给了我的LSTM模型.
这是我为此目的用keras编写的代码.
from keras.preprocessing.text import Tokenizer,base_filter
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense, Activation,Dropout,Embedding
from keras.layers import LSTM
def shift(seq, n):
n = n % len(seq)
return seq[n:] + seq[:n]
txt="abcdefghijklmn"*100
tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ")
tk.fit_on_texts(txt)
x = tk.texts_to_sequences(txt)
#shifing to left
y = shift(x,1)
#padding sequence
max_len = 100
max_features=len(tk.word_counts)
X = pad_sequences(x, maxlen=max_len)
Y = pad_sequences(y, maxlen=max_len)
#lstm model
model = Sequential()
model.add(Embedding(max_features, 128, …Run Code Online (Sandbox Code Playgroud) python neural-network keras recurrent-neural-network sequence-to-sequence
我想为回归构建一个玩具LSTM模型.对于初学者来说,这个漂亮的教程已经太复杂了.
给定一系列长度time_steps,预测下一个值.考虑time_steps=3和序列:
array([
[[ 1.],
[ 2.],
[ 3.]],
[[ 2.],
[ 3.],
[ 4.]],
...
Run Code Online (Sandbox Code Playgroud)
目标值应为:
array([ 4., 5., ...
Run Code Online (Sandbox Code Playgroud)
我定义了以下模型:
# Network Parameters
time_steps = 3
num_neurons= 64 #(arbitrary)
n_features = 1
# tf Graph input
x = tf.placeholder("float", [None, time_steps, n_features])
y = tf.placeholder("float", [None, 1])
# Define weights
weights = {
'out': tf.Variable(tf.random_normal([n_hidden, 1]))
}
biases = {
'out': tf.Variable(tf.random_normal([1]))
}
#LSTM model
def lstm_model(X, weights, biases, learning_rate=0.01, optimizer='Adagrad'):
# …Run Code Online (Sandbox Code Playgroud) python neural-network lstm tensorflow recurrent-neural-network
我试图用长字符序列标记字母.数据的固有结构要求我使用双向方法.
此外,基于这个想法,我需要在每个时间步进入隐藏状态,而不仅仅是最后一个.
为了尝试这个想法,我采用了固定长度的方法.我目前使用随机件的批量说每60个字符了我更长的时间序列,并且运行我的手工双向分类zero_state作为initial_state每个60封件.
这工作得很好,但显然不是很完美,因为实际上序列更长,并且从我从原始源中随机剪切的部分左右的信息丢失了.
现在为了推进我想要使用整个序列.它们的长度差异很大,我无法将整个序列(进一步批量)放到GPU上.
我在dynamic_rnn文档中找到了swap_memory - 参数.那会有帮助吗?
我没有找到任何有助于我理解的文档.而且我不能轻易地自己尝试这个,因为我需要在每个时间步都访问隐藏状态,因此我编写了当前图形而不使用任何更高级别的包装器(例如dynamic_rnn).尝试这一点需要我从包装器中获取所有中间状态,据我所知,这是很多工作要实现的.
在经历尝试这个问题的麻烦之前,我很想确定这确实会解决我的记忆问题.Thx任何提示!
我正在尝试制作一个Tensorflow图,其中图的一部分已经预先训练并在预测模式下运行,而其余的训练.我已经定义了我预先训练好的细胞:
rnn_cell = tf.contrib.rnn.BasicLSTMCell(100)
state0 = tf.Variable(pretrained_state0,trainable=False)
state1 = tf.Variable(pretrained_state1,trainable=False)
pretrained_state = [state0, state1]
outputs, states = tf.contrib.rnn.static_rnn(rnn_cell,
data_input,
dtype=tf.float32,
initial_state = pretrained_state)
Run Code Online (Sandbox Code Playgroud)
设置初始变量trainable=False没有帮助.这些仅用于初始化权重,因此权重仍然会发生变化.
我仍然需要在训练步骤中运行优化器,因为我的模型的其余部分需要训练.但是,如何防止优化器更改此rnn单元格中的权重?
是否有rnn_cell相当于trainable=False?
machine-learning deep-learning tensorflow recurrent-neural-network
我大致遵循了本教程:
https://machinelearningmastery.com/text-generation-lstm-recurrent-neural-networks-python-keras/
一个显着的区别是,我使用2个LSTM层与辍学。我的数据集是不同的(音乐数据集是abc表示法)。我确实生成了一些歌曲,但是在生成过程中经过一定数量的步骤(可能从30步到几百步)之后,LSTM不断重复生成完全相同的序列。例如,它曾经陷入了为歌曲生成URL的困境:
F:http : //www.youtube.com/watch?v=JPtqU6pipQI
等等 ...
它曾经一度被困于生成相同的两首歌(这两首歌是大约300个字符的序列)。在开始时,它产生了3-4个好的乐曲,但是之后,它几乎无限地保持了两首歌曲的再生。
我想知道,是否有人对可能发生的事情有所了解?
我想澄清的是,无论是重复还是不重复,生成的任何序列似乎都是新的(模型没有记忆性)。验证损失和培训损失按预期减少。Andrej Karpathy能够生成包含数千个字符的文档,但我找不到这种无限期卡住的模式。
我正在建立一个堆叠多个LSTM的动态RNN网络.我看到有两种选择
# cells_fw and cells_bw are list of cells eg LSTM cells
stacked_cell_fw = tf.contrib.rnn.MultiRNNCell(cells_fw)
stacked_cell_bw = tf.contrib.rnn.MultiRNNCell(cells_bw)
output = tf.nn.bidirectional_dynamic_rnn(
stacked_cell_fw, stacked_cell_bw, INPUT,
sequence_length=LENGTHS, dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)
VS
output = tf.contrib.rnn.stack_bidirectional_dynamic_rnn(cells_fw, cells_bw, INPUT,
sequence_length=LENGTHS, dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)
两种方法有什么区别,哪一方比另一方更好?
基本上,我正在使用Keras训练LSTM模型,但是当我保存它时,它的大小需要100MB.但是,我的模型的目的是部署到Web服务器以作为API,我的Web服务器无法运行它,因为模型大小太大.在分析了我的模型中的所有参数之后,我发现我的模型有20,000,000参数但15,000,000参数未经训练,因为它们是字嵌入.有没有办法可以通过删除15,000,000参数来最小化模型的大小,但仍保留模型的性能?这是我的模型代码:
def LSTModel(input_shape, word_to_vec_map, word_to_index):
sentence_indices = Input(input_shape, dtype="int32")
embedding_layer = pretrained_embedding_layer(word_to_vec_map, word_to_index)
embeddings = embedding_layer(sentence_indices)
X = LSTM(256, return_sequences=True)(embeddings)
X = Dropout(0.5)(X)
X = LSTM(256, return_sequences=False)(X)
X = Dropout(0.5)(X)
X = Dense(NUM_OF_LABELS)(X)
X = Activation("softmax")(X)
model = Model(inputs=sentence_indices, outputs=X)
return model
Run Code Online (Sandbox Code Playgroud) 因此,我对如何在Keras中将CNN与RNN结合存在一个疑问。在发布问题时,有人指出我这是解决问题的正确方法。显然,我只是忽略了原始代码中的某些内容,这使我回答了自己的问题。
原始问题如下:
如何在Keras中创建一个模型,该模型以图像序列作为输入,并在每个单独的图像上“看” CNN,并将CNN输出的序列馈入RNN?
为了更清楚一点:
模型一:观看单个图像的CNN。
模型二:RNN,位于模型一CNN输出的序列上。
因此,例如,CNN应该看到5张图像,并且这5个CNN输出的序列应该传递给RNN。
输入数据的格式如下
:(图像数,宽度,高度,通道)=(4000、120、60、1)
time-series conv-neural-network keras recurrent-neural-network