0

В настоящее время я разрабатываю нейронную сеть, и у меня есть все данные, и я получил код до такой степени, что изображение загружается в CNN для обучения. Однако в процессе обучения для первого изображения появляется всплывающее сообщение со следующим кодом.Неверная ошибка аргумента Ожидаемое начало [0] = 0

def convolutional_neural_network(x): 
    weights = {'W_conv1':tf.Variable(tf.random_normal([5,5,1,32])), 
       'W_conv2':tf.Variable(tf.random_normal([5,5,32,64])), 
       'W_fc':tf.Variable(tf.random_normal([7*7*64,1024])), 
       'out':tf.Variable(tf.random_normal([1024, n_classes]))} 

    biases = {'b_conv1':tf.Variable(tf.random_normal([32])), 
       'b_conv2':tf.Variable(tf.random_normal([64])), 
       'b_fc':tf.Variable(tf.random_normal([1024])), 
       'out':tf.Variable(tf.random_normal([n_classes]))} 

    x = tf.reshape(x, shape=[-1, 28, 28, 1]) 

    conv1 = tf.nn.relu(conv2d(x, weights['W_conv1']) + biases['b_conv1']) 
    conv1 = maxpool2d(conv1) 

    conv2 = tf.nn.relu(conv2d(conv1, weights['W_conv2']) + biases['b_conv2']) 
    conv2 = maxpool2d(conv2) 

    fc = tf.reshape(conv2,[-1, 7*7*64]) 
    fc = tf.nn.relu(tf.matmul(fc, weights['W_fc'])+biases['b_fc']) 
    fc = tf.nn.dropout(fc, keep_rate) 

    output = tf.matmul(fc, weights['out'])+biases['out'] 
    print("hi") 
    return output 


def shuffle_unison(images, labels): 
    shuffleLabel = [] 
    shuffleImage = [] 
    shuffleVector = [] 
    for i in range(0, len(images)-1): 
     shuffleVector.append(i) 
    random.shuffle(shuffleLabel) 
    for i in range(0, len(shuffleVector)-1): 
     shuffleImage.append(images[shuffleVector[i]]) 
     shuffleLabel.append(labels[shuffleVector[i]]) 
    return shuffleImage, shuffleLabel 





def train_neural_network(x): 
    prediction = convolutional_neural_network(x) 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction,y)) 
    optimizer = tf.train.AdamOptimizer().minimize(cost) 

    hm_epochs = 10 
    # step 4: Batching 

    with tf.Session() as sess: 
     init = tf.initialize_all_variables() 
     sess.run(init) 
     tf.train.start_queue_runners() 
     #array of strings and corresponding values 
     image_list, label_list = readImageLables() 
     for epoch in range(hm_epochs): 
      epoch_loss = 0 
      #shuffle every epoch 
      shuffle_image_list, shuffle_label_list = shuffle_unison(image_list, label_list) 
      sampleList = ['/home/sciencefair/Desktop/OrchardData/MachineLearningTesting/RottenOranges/result1.jpg'] 
      for i in range(0,7683): 
       #filename_queue = tf.train.string_input_producer(sampleList) 
       file_contents = tf.read_file(shuffle_image_list[i]) 
       image = tf.image.decode_jpeg(file_contents, channels=1) 
       resized_image = tf.image.resize_images(image, [28,28]) 
       #image_batch, label_batch = tf.train.batch([resized_image, shuffle_label_list[i]], batch_size=batch_size) # does train.batch take individual images or final tensors 
       #if(i>batch_size): 
        #print(label_batch.eval()) 
       a = tf.reshape(resized_image,[1, 784]) 
       print(a.eval()) 
       _, c = sess.run([optimizer, cost], feed_dict={x: tf.reshape(resized_image,[1, 784]).eval(), y: shuffle_label_list[i]}) 
       epoch_loss += c 
       print("ok") 

      print('Epoch', epoch, 'completed out of',hm_epochs,'loss:',epoch_loss) 
     sess.close() 

Трассировка стека выглядел как этот

Caused by op 'Slice_1', defined at: 
    File "revisednet.py", line 128, in <module> 
    train_neural_network(x) 
    File "revisednet.py", line 87, in train_neural_network 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction,y)) 
    File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/nn_ops.py", line 670, in softmax_cross_entropy_with_logits 
    labels = _flatten_outer_dims(labels) 
    File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/nn_ops.py", line 472, in _flatten_outer_dims 
    array_ops.shape(logits), [math_ops.sub(rank, 1)], [1]) 
    File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/array_ops.py", line 431, in slice 
    return gen_array_ops._slice(input_, begin, size, name=name) 
    File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 2234, in _slice 
    name=name) 
    File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/op_def_library.py", line 749, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 2380, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 1298, in __init__ 
    self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): Expected begin[0] == 0 (got -1) and size[0] == 0 (got 1) when input.dim_size(0) == 0 
    [[Node: Slice_1 = Slice[Index=DT_INT32, T=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](Shape_2, Slice_1/begin, Slice_1/size)]] 

Эта ошибка, кажется, исходят из данных, вызывающих некоторые confliction с SoftMax функции. Однако я совершенно не знаю, что вызывает эту проблему.

+0

есть ли какая-либо конкретная строка, которая вызывает ошибку? –

+0

Да в соответствии со стеком, который я предоставил, строка 87. TF.reduce_mean ... –

ответ

1

Я следовал этому руководству: Sentdex, First pass through Data w/ 3D ConvNet , чтобы построить 3D-CNN и получил ту же ошибку, что и ваша.

Эта ошибка возникает из-за того, что размер вектора метки моих входных данных (например, расположение первого вектора метки в данных поезда Sentdex составляет train_data[0][1]) должно быть того же номера, что и n_classes, который в учебнике равен 2.

В моей неправильной попытке я просто использую двоичное значение 0 или 1 для его представления, размер которого равен 1, где должно быть 2. Таким образом, функция tf.nn.softmax_cross_entropy_with_logits() была смущена неправильным размером вектора меток.

Попробуйте изменить размер вектора этикеток так, чтобы он был равен вашему n_classes.

Смежные вопросы