- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在学习 LSTM。我从一本书上找到了一个代码来预测正余弦混合曲线。然而,我陷入了它的推理功能。
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
import os
LOG_DIR = os.path.join(os.path.dirname(__file__), "log")
if os.path.exists(LOG_DIR) is False:
os.mkdir(LOG_DIR)
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
def inference(x, n_batch, maxlen=None, n_hidden=None, n_out=None):
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.01)
return tf.Variable(initial)
def bias_variable(shape):
initial = tf.zeros(shape, dtype=tf.float32)
return tf.Variable(initial)
cell = tf.contrib.rnn.BasicLSTMCell(n_hidden)
initial_state = cell.zero_state(n_batch, tf.float32)
state = initial_state
outputs = []
with tf.variable_scope('LSTM'):
for t in range(maxlen):
if t > 0:
tf.get_variable_scope().reuse_variables()
(cell_output, state) = cell(x[:, t, :], state)
outputs.append(cell_output)
output = outputs[-1]
V = weight_variable([n_hidden, n_out])
c = bias_variable([n_out])
y = tf.matmul(output, V) + c #
return y
def loss(y, t):
mse = tf.reduce_mean(tf.square(y - t))
return mse
def training(loss):
optimizer = tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999)
train_step = optimizer.minimize(loss)
return train_step
class EarlyStopping():
def __init__(self, patience=0, verbose=0):
self._step = 0
self._loss = float('inf')
self.patience = patience
self.verbose = verbose
def validate(self, loss):
if self._loss < loss:
self._step += 1
if self._step > self.patience:
if self.verbose:
print('early stopping')
return True
else:
self._step = 0
self._loss = loss
return False
def sin(x, T):
return np.sin(12.0 * np.pi * x / T)
def cos(x, T):
return np.cos(17.0 * np.pi * x / T) / 3
def toy_problem(x, T, ampl=0.05):
x = np.arange(0, 2 * T + 1)
noise = ampl * np.random.uniform(low=-1.0, high=1.0, size=len(x))
return sin(x, T) + cos(x, T) + noise
if __name__ == '__main__':
T = 500
x = np.arange(0, 2 * T + 1)
length_of_sequence = 2 * T
maxlen = 300 # length of one sequential data set
f = toy_problem(x, T)
data = []
target = []
for i in range(0, length_of_sequence - maxlen + 1):
data.append(f[i:i + maxlen]) # e.g, [1,2,3,4]
target.append(f[i + maxlen]) # [5] <- next value
X = np.array(data).reshape(len(data), maxlen, 1) # store sequential data & coordinate num of dimension
Y = np.array(target).reshape(len(data), 1) # store target data & coordinate num of dimension
"""
divide training data and validation data
"""
N_train = int(len(data) * 0.9)
N_validation = len(data) - N_train
X_train, X_validation, Y_train, Y_validation = \
train_test_split(X, Y, test_size=N_validation)
# data distribution function
"""
Model Configuration
"""
n_in = len(X[0][0]) # 1
n_hidden = 30 # num of units(not layers) in a hidden layer
n_out = len(Y[0]) # 1
x = tf.placeholder(tf.float32, shape=[None, maxlen, n_in])
t = tf.placeholder(tf.float32, shape=[None, n_out])
n_batch = tf.placeholder(tf.int32, shape=[])
y = inference(x, n_batch, maxlen=maxlen, n_hidden=n_hidden, n_out=n_out)
loss = loss(y, t)
train_step = training(loss)
early_stopping = EarlyStopping(patience=10, verbose=1) # create instance of EarlyStopping
history = {
'val_loss': []
}
"""
Model Learning
"""
epochs = 500 # num of times to train NN using a whole training data set
batch_size = 10 # size which divide a whole training data set
init = tf.global_variables_initializer() # initialization
sess = tf.Session() # instance of Session func
tf.summary.FileWriter(LOG_DIR, sess.graph) # create log file to show in Tensor Board
summary_op = tf.summary.merge_all()
summary_writer = tf.summary.FileWriter("./log/RNN2/", sess.graph_def)
sess.run(init) # run a graph
n_batches = N_train // batch_size # num of batches
for epoch in range(epochs):
X_, Y_ = shuffle(X_train, Y_train) # we need to shuffle training data to train NN well
for i in range(n_batches): # train with mini batch method
start = i * batch_size
end = start + batch_size
sess.run(train_step, feed_dict={
# Training with "batch size" number of sequential data
x: X_[start:end],
t: Y_[start:end],
n_batch: batch_size
}) # after training, the NN parameters keep remaining (I guess)
# after one epoch,compute the loss
val_loss = loss.eval(session=sess, feed_dict={
# .eval() returns values
x: X_validation,
t: Y_validation,
n_batch: N_validation
})
history['val_loss'].append(val_loss)
print('epoch:', epoch, ' validation loss:', val_loss)
if early_stopping.validate(val_loss):
break
'''
Prediction with output
'''
truncate = maxlen
Z = X[:1] # get the first part of original data
print "Z", Z
original = [f[i] for i in range(maxlen)]
predicted = [None for i in range(maxlen)]
# predict the future from the last sequential data
z_ = Z[-1:]
for i in range(length_of_sequence - maxlen + 1):
y_ = y.eval(session=sess, feed_dict={
x: z_,
n_batch: 1
})
# compute new sequential data using prediction output which is created by trained network
sequence_ = np.concatenate((z_.reshape(maxlen, n_in)[1:], y_), axis=0).reshape(1, maxlen, n_in)
z_ = sequence_
predicted.append(y_.reshape(-1))
'''
Visualization
'''
plt.rc('font', family='serif')
plt.figure()
plt.ylim([-2.0, 2.0])
# plt.plot(sin(x,T), linestyle='dotted', color='#aaaaaa')
# plt.plot(cos(x,T), linestyle='dotted', color='#aaaaaa')
plt.plot(toy_problem(x, T), linestyle='dotted', color='#aaaaaa')
plt.plot(original, color='black')
plt.plot(predicted, color='red')
plt.show()
在推理函数中,我们有
cell = tf.contrib.rnn.BasicLSTMCell(n_hidden)
initial_state = cell.zero_state(n_batch, tf.float32)
state = initial_state
outputs = []
with tf.variable_scope('LSTM'):
for t in range(maxlen):
if t > 0:
tf.get_variable_scope().reuse_variables()
(cell_output, state) = cell(x[:, t, :], state)
outputs.append(cell_output)
output = outputs[-1]
但我不知道 cell = tf.contrib.rnn.BasicLSTMCell(n_hidden)
和 (cell_output, state) = cell(x[:, t, :], state )
确实如此。
我试图理解,但如果有人有线索。
最佳答案
这是使用 Tensorflow 的 RNN 实用程序的标准代码。您可以阅读更多here .
很快,
cell = tf.contrib.rnn.BasicLSTMCell(n_hidden)
创建一个 LSTM 层并实例化所有门的变量。
(cell_output, state) = cell(x[:, t, :], state)
是提供张量 1 维的每个元素作为输入序列的层的有效运行 x
(即 x[:, t, :]
)。换句话说,x 是一个 3 维张量,它沿着维度 1(列)进行切片,每个切片都是作为 LSTM 层输入给出的序列的一个元素。
cell_output
是每个切片的层的输出
outputs
包含maxlen
值,它们是输入序列的每个元素 ( x[:, t, :]
) 的层的输出。
关于tensorflow - BasicLSTMCell 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46134806/
我想将模型及其各自训练的权重从 tensorflow.js 转换为标准 tensorflow,但无法弄清楚如何做到这一点,tensorflow.js 的文档对此没有任何说明 我有一个 manifest
我有一个运行良好的 TF 模型,它是用 Python 和 TFlearn 构建的。有没有办法在另一个系统上运行这个模型而不安装 Tensorflow?它已经经过预训练,所以我只需要通过它运行数据。 我
当执行 tensorflow_model_server 二进制文件时,它需要一个模型名称命令行参数,model_name。 如何在训练期间指定模型名称,以便在运行 tensorflow_model_s
我一直在 R 中使用标准包进行生存分析。我知道如何在 TensorFlow 中处理分类问题,例如逻辑回归,但我很难将其映射到生存分析问题。在某种程度上,您有两个输出向量而不是一个输出向量(time_t
Torch7 has a library for generating Gaussian Kernels在一个固定的支持。 Tensorflow 中有什么可比的吗?我看到 these distribu
在Keras中我们可以简单的添加回调,如下所示: self.model.fit(X_train,y_train,callbacks=[Custom_callback]) 回调在doc中定义,但我找不到
我正在寻找一种在 tensorflow 中有条件打印节点的方法,使用下面的示例代码行,其中每 10 个循环计数,它应该在控制台中打印一些东西。但这对我不起作用。谁能建议? 谢谢,哈米德雷萨, epsi
我想使用 tensorflow object detection API 创建我自己的 .tfrecord 文件,并将它们用于训练。该记录将是原始数据集的子集,因此模型将仅检测特定类别。我不明白也无法
我在 TensorFlow 中训练了一个聊天机器人,想保存模型以便使用 TensorFlow.js 将其部署到 Web。我有以下内容 checkpoint = "./chatbot_weights.c
我最近开始学习 Tensorflow,特别是我想使用卷积神经网络进行图像分类。我一直在看官方仓库中的android demo,特别是这个例子:https://github.com/tensorflow
我目前正在研究单图像超分辨率,并且我设法卡住了现有的检查点文件并将其转换为 tensorflow lite。但是,使用 .tflite 文件执行推理时,对一张图像进行上采样所需的时间至少是使用 .ck
我注意到 tensorflow 的 api 中已经有批量标准化函数。我不明白的一件事是如何更改训练和测试之间的程序? 批量归一化在测试和训练期间的作用不同。具体来说,在训练期间使用固定的均值和方差。
我创建了一个模型,该模型将 Mobilenet V2 应用于 Google colab 中的卷积基础层。然后我使用这个命令转换它: path_to_h5 = working_dir + '/Tenso
代码取自:- http://adventuresinmachinelearning.com/python-tensorflow-tutorial/ import tensorflow as tf fr
好了,所以我准备在Tensorflow中运行 tf.nn.softmax_cross_entropy_with_logits() 函数。 据我了解,“logit”应该是概率的张量,每个对应于某个像素的
tensorflow 服务构建依赖于大型 tensorflow ;但我已经成功构建了 tensorflow。所以我想用它。我做这些事情:我更改了 tensorflow 服务 WORKSPACE(org
Tensoflow 嵌入层 ( https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding ) 易于使用, 并且有大量的文
我正在尝试使用非常大的数据集(比我的内存大得多)训练 Tensorflow 模型。 为了充分利用所有可用的训练数据,我正在考虑将它们分成几个小的“分片”,并一次在一个分片上进行训练。 经过一番研究,我
根据 Sutton 的书 - Reinforcement Learning: An Introduction,网络权重的更新方程为: 其中 et 是资格轨迹。 这类似于带有额外 et 的梯度下降更新。
如何根据条件选择执行图表的一部分? 我的网络有一部分只有在 feed_dict 中提供占位符值时才会执行.如果未提供该值,则采用备用路径。我该如何使用 tensorflow 来实现它? 以下是我的代码
我是一名优秀的程序员,十分优秀!