CTC丢失Tensorflow,未找到有效路径

时间:2017-11-23 18:06:49

标签: python tensorflow

我尝试使用ctc_loss来预测某些标签,但这是我第一次使用此功能时遇到错误。

def bi_rnn(x_bi):
    # Prepare data shape to match `rnn` function requirements
    # Current data input shape: (batch_size, timesteps, n_input)
    # Required shape: 'timesteps' tensors list of shape (batch_size, num_input)
    # Unstack to get a list of 'timesteps' tensors of shape (batch_size, num_input)
    x_bi_shape = x_bi.get_shape().as_list()
    x_bi = tf.unstack(x_bi, x_bi_shape[2], 2)
    # Define lstm cells with tensorflow
    # Forward direction cell

    lstm_fw_cell = rnn.BasicLSTMCell(num_neurons, forget_bias=1.0)
    # Backward direction cell
    lstm_bw_cell = rnn.BasicLSTMCell(num_neurons, forget_bias=1.0)


    bi_outputs, _, _ = rnn.static_bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x_bi, dtype=tf.float32)

    w_bi = init_weights([num_neurons * 2, num_classes])
    b_bi = init_bias([num_classes])

    bi_outputs = tf.squeeze(input=bi_outputs, axis=1)

    return tf.matmul(bi_outputs, w_bi) + b_bi


def sparse_tuple_from(sequences, dtype=np.int32):
    """Create a sparse representention of x.
    Args:
        sequences: a list of lists of type dtype where each element is a sequence
    Returns:
        A tuple with (indices, values, shape)
    """
    indices = []
    values = []

    for n, seq in enumerate(sequences):
        indices.extend(zip([n] * len(seq), range(len(seq))))
        values.extend(seq)

    indices = np.asarray(indices, dtype=np.int64)
    values = np.asarray(values, dtype=dtype)
    shape = np.asarray([len(sequences), np.asarray(indices).max(0)[1] + 1], dtype=np.int64)

    return indices, values, shape


bi_output_1 = bi_rnn(vectors)
targets = tf.sparse_placeholder(tf.int32, name="targets_sparse_tensor")
bi_output_1_shape = bi_output_1.get_shape().as_list()
global_step = tf.Variable(0, trainable=False)
bi_output_1 = tf.reshape(bi_output_1, [bi_output_1_shape[0], batch_size, bi_output_1_shape[1]])
# 1d array of size [batch_size]
seq_len = tf.placeholder(tf.int32, [None])
loss = tf.nn.ctc_loss(labels=targets, inputs=bi_output_1, sequence_length=seq_len)

cost = tf.reduce_mean(loss)
optimizer = tf.train.MomentumOptimizer(learning_rate=0.001,  momentum=0.9).minimize(cost, global_step=global_step)

这是我如何训练网:

with tf.Session() as sess:
    sess.run(init)
    for i in range(1, epochs):
        loss = 0
        start = 0
        for cont in range(int(n_samples / batch_size)):
            batch_x, batch_y = feature_set.next_batch_training_set(batch_size, start)
            batch_y = sparse_tuple_from(batch_y)
            seq_len_training = np.ones(1) * 7
            _, c = sess.run([optimizer, cost], feed_dict={x: batch_x, targets: batch_y, seq_len: seq_len_training})
            loss += c
        print('Epoch:', i, ' loss:', loss)

使用:

batch_size = 1
bi_output_1 = Tensor("重塑:0",shape =(25,1,37),dtype = float32)
batch_x具有形状:(1,20,100,1)
batch_y具有形状:(1,7)(在函数sparse_tuple_from()之前)

我收到了这个错误:

2017-11-23 18:50:14.033220: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\util\ctc\ctc_loss_calculator.cc:144] No valid path found.

我不知道如何解决这个问题。我试着按照this示例,但我没有帮助。

0 个答案:

没有答案