2016-10-21 2 views
0

Ich habe trainiert cnn Modell und gespeicherten Parameter in fünf Dateien, aber wenn ich diese params verwenden, um Fotos zu testen, treffe ich eine Frage wie folgt aus: enter image description heremake_node erfordert 4D Tensor Kernel

der Code von load_data ist:

def load_data(pag_name):`` 
k = 0 
for filename in os.listdir(pag_name): 
    if (filename != '.DS_Store'): 
     k = k + 1 
num = k 
# test_per = k*4 
print k 

i = 0 
j = 0 
label = 0 

train_set = numpy.empty((num, 1, 56, 56)) 
while (j < 1): 
    for filename in os.listdir(pag_name): 
     if (filename != '.DS_Store'): 
      filename = pag_name+ '/' + filename 
      image = Image.open(filename) 
      #print image.size 
      #print image 
      img_ndarray = numpy.asarray(image, dtype='float64')/256 
      img_ndarray = numpy.asarray([img_ndarray]) 
        # train_set[i] = numpy.ndarray.flatten(img_ndarray) 
      train_set[i] = img_ndarray 
      #print train_set.shape 
        # print filename1 
        # print 'label:', label 
        # print 'i:',i 
      i = i + 1 
    j = j + 1 

def shared_dataset(data_x, borrow=True): 
    shared_x = theano.shared(numpy.asarray(data_x, 
              dtype=theano.config.floatX), 
          borrow=borrow) 
    return shared_x 

train_set = shared_dataset(train_set) 
print train_set.get_value(borrow=True).shape 
return train_set 

und der Code von use_CNN ist:

def use_CNN(pag_name,nkerns=[20,40,60]): 
data = load_data(pag_name) 
data_num = data.get_value(borrow=True).shape[0] 
layer0_params,layer01_params,layer1_params,layer2_params,layer3_params = load_params() 
x = T.matrix('x') 

layer0_input = x.reshape((data_num,1,56,56)) 
layer0 = LeNetConvPoolLayer(
    input=layer0_input, 
    params_W = layer0_params[0], 
    params_b = layer0_params[1], 
    image_shape=(data_num, 1, 56, 56), 
    filter_shape=(nkerns[0], 1, 5,5), 
    poolsize=(2, 2)` 
) 

ich habe dieses Problem nicht gerecht zu werden, und ich weiß nicht, wo und wie ich den Code ändern.

+0

können Sie Ihren 'LeNetConvPoolLayer' Klassencode eingeben? – malioboro

+0

danke. Ich habe dieses Problem gelöst.Weil ich W und b in einer Datei speichern. Aber wenn ich Params lade. Hier sind einige Probleme. – HYY

+0

der Code von LeNetConvPoolLayer ist: – HYY

Antwort

0

Das Ergebnis dieses Fehlers ist die Parameter sind nicht 4D, die Params I laden ist 3D, wie meine W und b ist (20,1,5,5), aber ich lade (1,5,5), also treffe ich dieses Problem.