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)]] 

这个错误似乎从导致一些冲突与SOFTMAX函数的数据发起。不过,我完全不知道是什么导致了这个问题。

+0

是否有任何特定的行导致错误? –

+0

是的,根据我提供的堆栈,第87行。TF.reduce_mean ... –

回答

1

我按照这个教程:Sentdex, First pass through Data w/ 3D ConvNet 建立一个3D CNN,并得到了与你一样的错误在这里。

发生此错误是因为我的输入数据(例如,Sentdex的列车数据中的第一个标签矢量的位置为train_data[0][1])的标签矢量的维数应与本教程中为2的n_classes相同。

在我错误的尝试中,我只是使用二进制值0或1来表示它,其维数为1应该是2.因此tf.nn.softmax_cross_entropy_with_logits()函数被错误的标签向量大小弄糊涂了。

尝试扩展您的标签向量的尺寸等于您的n_classes