当我使用 Keras 运行此代码时:
networkDrive = Input(batch_shape=(1,length,1))
network = SimpleRNN(3, activation='tanh', stateful=False, return_sequences=True)(networkDrive)
generatorNetwork = Model(networkDrive, network)
predictions = generatorNetwork.predict(noInput, batch_size=length)
print(np.array(generatorNetwork.layers[1].get_weights()))
Run Code Online (Sandbox Code Playgroud)
我得到这个输出
[array([[ 0.91814435, 0.2490257 , 1.09242284]], dtype=float32)
array([[-0.42028981, 0.68996912, -0.58932084],
[-0.88647962, -0.17359462, 0.42897415],
[ 0.19367599, 0.70271438, 0.68460363]], dtype=float32)
array([ 0., 0., 0.], dtype=float32)]
Run Code Online (Sandbox Code Playgroud)
我想,(3,3) 矩阵是权重矩阵,将 RNN 单元相互连接起来,两个数组之一可能是偏差但第三个是什么?
当我使用.fit()
图层训练模型时,参数shuffle预设为True.
假设我的数据集有100个样本,批量大小为10.当我设置shuffle = True
然后keras首先随机随机选择样本(现在100个样本有不同的顺序),并且在新订单上它将开始创建批次:批处理1:1-10,批次2:11-20等
如果我设置shuffle = 'batch'
它应该如何在后台工作?直观地使用前面的100个样本数据集的例子,批量大小= 10,我的猜测是keras首先将样本分配给批次(即批次1:数据集原始订单后的样本1-10,批次2:11-20以下数据集原始顺序,批次3 ......等等)然后洗牌批次的顺序.因此,模型现在将按随机订购的批次进行培训,例如:3(包含样品21 - 30),4(包含样品31 - 40),7(包含样品61 - 70),1(包含样品1 - 10) ),...(我编制了批次的顺序).
我的想法是正确还是我错过了什么?
谢谢!
在keras后端,我们还有一个标志with_logits
在K.binary_crossentropy
。正常的二进制互熵和带对数的二进制互熵有什么区别?假设我正在使用seq2seq模型,并且我的输出序列是type 100111100011101
。
如果我在输入中给出了类似的顺序以及时间步长,那么递归的LSTM或RNN应该从该数据中学到什么呢?
pytorch教程通过定义输入层和隐藏层,并手动将隐藏层送回到网络中以记住状态,很好地说明了基本的RNN。然后,这种灵活性使您可以非常轻松地执行教师强制。
问题1:在使用本机nn.RNN()
模块时,您如何执行教师强迫(因为整个序列是一次输入的)?简单的RNN网络示例如下:
class SimpleRNN(nn.Module):
def __init__(self, vocab_size,
embedding_dim,
batch_sz,
hidden_size=128,
nlayers=1,
num_directions=1,
dropout=0.1):
super(SimpleRNN, self).__init__()
self.batch_sz = batch_sz
self.hidden_size = hidden_size
self.encoder = nn.Embedding(vocab_size, embedding_dim)
self.rnn = nn.RNN(embedding_dim, hidden_size, nlayers, dropout=0.5)
self.decoder = nn.Linear(hidden_size, vocab_size)
def init_hidden(self):
return autograd.Variable(torch.zeros(nlayers, batch_sz, hidden_size)).cuda()
def forward(self, inputs, hidden):
# -- encoder returns:
# -- [batch_sz, seq_len, embed_dim]
encoded = self.encoder(inputs)
_, seq_len, _ = encoded.size()
# -- rnn returns:
# -- output.size() = [seq_len, batch_sz, hidden_sz]
# -- hidden.size() = …
Run Code Online (Sandbox Code Playgroud) 假设我在Keras有一个LSTM层,如下所示:
x = Input(shape=(input_shape), dtype='int32')
x = LSTM(128,return_sequences=True)(x)
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用以下方法将Dropout添加到此图层:
X = Dropout(0.5)
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误,我假设上面的行正在重新定义X而不是向它添加Dropout.如何解决这个问题?
我正在尝试使用带有自定义数据的RNN寻找带有标签的图像分类。除了Mnist数据集,我找不到其他示例。像这样的使用CNN进行分类的存储库的任何帮助将不胜感激。关于使用RNN进行图像分类的任何帮助都将有所帮助。尝试替换以下教程的CNN网络。
我一直在Tensorflow中跟踪SEGFAULT。可以使用以下代码段重现该问题:
import tensorflow as tf
with tf.device('/cpu:0'):
xin = tf.placeholder(tf.float32, [None, 1, 1], name='input')
rnn_cell = tf.contrib.rnn.LSTMCell(1)
out, _ = tf.nn.dynamic_rnn(rnn_cell, xin, dtype=tf.float32)
out = tf.layers.batch_normalization(out, training=True)
out = tf.identity(out, name='output')
optimiser = tf.train.AdamOptimizer(.0001)
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
out = optimiser.minimize(out, global_step=tf.Variable(0, dtype=tf.float32), name='train_op')
config = tf.ConfigProto(allow_soft_placement = False)
sess = tf.Session(config=config)
sess.run(tf.global_variables_initializer())
sample_in = [[[0]]]
sess.run(out, feed_dict={xin: sample_in})
Run Code Online (Sandbox Code Playgroud)
我设法找到了这个问题,并在github上有一个pull-request请求。如果使用我的补丁程序运行此代码,则会收到以下错误消息:
2018-04-03 13:09:24.326950: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1212] Found device 0 with properties:
name: TITAN Xp major: 6 minor: …
Run Code Online (Sandbox Code Playgroud) 我正在试图配置RNN神经网络,以预测5种不同类型的文本实体.我正在使用下一个配置:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(seed)
.iterations(100)
.updater(Updater.ADAM) //To configure: .updater(Adam.builder().beta1(0.9).beta2(0.999).build())
.regularization(true).l2(1e-5)
.weightInit(WeightInit.XAVIER)
.gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue).gradientNormalizationThreshold(1.0)
.learningRate(2e-2)
.trainingWorkspaceMode(WorkspaceMode.SEPARATE).inferenceWorkspaceMode(WorkspaceMode.SEPARATE) //https://deeplearning4j.org/workspaces
.list()
.layer(0, new GravesLSTM.Builder().nIn(500).nOut(3)
.activation(Activation.TANH).build())
.layer(1, new RnnOutputLayer.Builder(LossFunctions.LossFunction.MCXENT).activation(Activation.SOFTMAX) //MCXENT + softmax for classification
.nIn(3).nOut(5).build())
.pretrain(false).backprop(true).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
Run Code Online (Sandbox Code Playgroud)
我训练它然后我评估它.有用.不过我用的时候:
int[] prediction = net.predict(features);
Run Code Online (Sandbox Code Playgroud)
有时它会回归并出现意想不到的预测.它返回正确的预测为1,2 .... 5但有时它返回数字为9,14,12 ...这个数字不对应于已识别的预测/标签.
为什么此配置会返回意外输出?
我在tensorflow中有以下模型:
def output_layer(input_layer, num_labels):
'''
:param input_layer: 2D tensor
:param num_labels: int. How many output labels in total? (10 for cifar10 and 100 for cifar100)
:return: output layer Y = WX + B
'''
input_dim = input_layer.get_shape().as_list()[-1]
fc_w = create_variables(name='fc_weights', shape=[input_dim, num_labels],
initializer=tf.uniform_unit_scaling_initializer(factor=1.0))
fc_b = create_variables(name='fc_bias', shape=[num_labels], initializer=tf.zeros_initializer())
fc_h = tf.matmul(input_layer, fc_w) + fc_b
return fc_h
def model(input_features):
with tf.variable_scope("GRU"):
cell1 = tf.nn.rnn_cell.GRUCell(gru1_cell_size)
cell2 = tf.nn.rnn_cell.GRUCell(gru2_cell_size)
mcell = tf.nn.rnn_cell.MultiRNNCell([cell1, cell2], state_is_tuple=False)
# shape=(?, 64 + 32)
initial_state = tf.placeholder(shape=[None, gru1_cell_size …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用LSTM RNN在Tensorflow.js中构建一个简单的时间序列预测脚本。我显然是ML的新手。我一直在尝试从Keras RNN / LSTM层api改编我的JS代码,这显然是同一回事。从我收集的图层来看,形状等都是正确的。对我在这里做错的任何想法吗?
async function predictfuture(){
////////////////////////
// create fake data
///////////////////////
var xs = tf.tensor3d([
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]]
]);
xs.print();
var ys = tf.tensor3d([
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]],
[[1],[1],[0]]
]);
ys.print();
////////////////////////
// create model w/ layers api
///////////////////////
console.log('Creating Model...');
/*
model design:
i(xs) h o(ys)
batch_size -> * * * -> batch_size
timesteps -> * * * -> timesteps
input_dim -> * * * -> input_dim
*/
const model = tf.sequential(); …
Run Code Online (Sandbox Code Playgroud) rnn ×10
keras ×5
python ×4
tensorflow ×4
lstm ×3
gradient ×1
java ×1
javascript ×1
pytorch ×1
shuffle ×1