2017-04-08 3 views
0

음성 시퀀스 인식을 위해 ctc 손실로 blstm을 학습하려고합니다.훈련 중 keras 오류가있는 ctc blstm

def ctc_lambda_func(args): 
    y_pred, labels, input_length, label_length = args 
    # the 2 is critical here since the first couple outputs of the RNN 
    # tend to be garbage: 
    y_pred = y_pred[:, 2:, :] 

    ctc_batch_loss = K.ctc_batch_cost(labels, y_pred, input_length, label_length) 

    return ctc_batch_loss 

내가 믿는 :

W tensorflow/core/framework/op_kernel.cc:993] Invalid argument: slice index 0 of dimension 0 out of bounds. 
    [[Node: ctc/scan/strided_slice = StridedSlice[Index=DT_INT32, T=DT_INT32, begin_mask=0, ellipsis_mask=0, end_mask=0, new_axis_mask=0, shrink_axis_mask=1, _device="/job:localhost/replica:0/task:0/gpu:0"](ctc/scan/Shape, ctc/scan/strided_slice/stack, ctc/scan/strided_slice/stack_1, ctc/scan/strided_slice/stack_2)]] 
Traceback (most recent call last): 
    File "speech_lstm_ctc.py", line 212, in <module> 
    callbacks=[earlystopping, checkpoint, data_gen]) 
    File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 88, in wrapper 
    return func(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1876, in fit_generator 
    class_weight=class_weight) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1620, in train_on_batch 
    outputs = self.train_function(ins) 
    File "/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.py", line 2073, in __call__ 
    feed_dict=feed_dict) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 767, in run 
    run_metadata_ptr) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 965, in _run 
    feed_dict_string, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1015, in _do_run 
    target_list, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1035, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.InvalidArgumentError: slice index 0 of dimension 0 out of bounds. 
    [[Node: ctc/scan/strided_slice = StridedSlice[Index=DT_INT32, T=DT_INT32, begin_mask=0, ellipsis_mask=0, end_mask=0, new_axis_mask=0, shrink_axis_mask=1, _device="/job:localhost/replica:0/task:0/gpu:0"](ctc/scan/Shape, ctc/scan/strided_slice/stack, ctc/scan/strided_slice/stack_1, ctc/scan/strided_slice/stack_2)]] 
    [[Node: ctc/scan/while/Less_1/_77 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_981_ctc/scan/while/Less_1", tensor_type=DT_BOOL, _device="/job:localhost/replica:0/task:0/cpu:0"](^_cloopctc/scan/while/TensorArrayReadV3/_17)]] 

Caused by op u'ctc/scan/strided_slice', defined at: 
    File "speech_lstm_ctc.py", line 189, in <module> 
    loss_out = Lambda(ctc_lambda_func, output_shape=(1,), name="ctc")([y_pred, labels, input_length, label_length]) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 554, in __call__ 
    output = self.call(inputs, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/keras/layers/core.py", line 659, in call 
    return self.function(inputs, **arguments) 
    File "speech_lstm_ctc.py", line 141, in ctc_lambda_func 
    ctc_batch_loss = K.ctc_batch_cost(labels, y_pred, input_length, label_length) 
    File "/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.py", line 3258, in ctc_batch_cost 
    sparse_labels = tf.to_int32(ctc_label_dense_to_sparse(y_true, label_length)) 
    File "/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.py", line 3222, in ctc_label_dense_to_sparse 
    initializer=init, parallel_iterations=1) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/functional_ops.py", line 524, in scan 
    n = array_ops.shape(elems_flat[0])[0] 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 495, in _SliceHelper 
    name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 653, in strided_slice 
    shrink_axis_mask=shrink_axis_mask) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 3688, in strided_slice 
    shrink_axis_mask=shrink_axis_mask, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 763, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2327, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1226, in __init__ 
    self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): slice index 0 of dimension 0 out of bounds. 
    [[Node: ctc/scan/strided_slice = StridedSlice[Index=DT_INT32, T=DT_INT32, begin_mask=0, ellipsis_mask=0, end_mask=0, new_axis_mask=0, shrink_axis_mask=1, _device="/job:localhost/replica:0/task:0/gpu:0"](ctc/scan/Shape, ctc/scan/strided_slice/stack, ctc/scan/strided_slice/stack_1, ctc/scan/strided_slice/stack_2)]] 
    [[Node: ctc/scan/while/Less_1/_77 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_981_ctc/scan/while/Less_1", tensor_type=DT_BOOL, _device="/job:localhost/replica:0/task:0/cpu:0"](^_cloopctc/scan/while/TensorArrayReadV3/_17)]] 

캐나다 관광청 손실을 구현하는 기능은 다음과 같다 : 나는 실행 코드를 얻을 수 있었다하지만 훈련은 다음과 같은 오류와 두 번째 시대의 특정 단계에서 실패 그 오류는 다른 입력을 사용하는 경우에도 동일한 단계에서 매번 나타나기 때문에 특정 입력에 대해 오류가 발생하지 않아야합니다.

어떤 원인 일 수 있습니까?

답변

0

배치 생성기가 어떤 시점에서 크기 1의 미니 배치를 실제로 제공하여 텐서 흐름이 충돌하는 것으로 나타났습니다. 미니 배치를 항상 1보다 크게하여이를 수정했습니다.

관련 문제