2017-11-20 3 views
0

Ich habe ein Python-Skript, das in einer der Zeilen eine Funktion aufruft, die in einer anderen Klasse existiert, die in einem anderen Skript existiert. Ich habe das Skript bereits importiert und auf die Funktion, aber diese Funktion zugegriffen nimmt ein Argument, das eine Instanz der Klasse selbst ist. die Funktion ist in Skript model.py und im Inneren eine Klasse namens Model innerhalb Model die Funktion ist, die Funktion innerhalb model.pyEine Klasseninstanz als Argument übergeben

class Model(object):  
    def create_base(self, 
     images, 
     labels_one_hot, 
     scope='AttentionOcr_v1', 
     reuse=None): 

so, wenn ich den folgenden Code

import skimage.io as io 
import numpy as np 
import collections 
import os 
import tensorflow as tf 
import common_flags 
import model 

from tensorflow.python.platform import flags 

FLAGS = flags.FLAGS 
common_flags.define() 

images_placeholder = tf.placeholder(tf.float32, shape=[635, 1219]) 
fn ='/home/ubuntu/tensorflow/6m.jpg' 
images = [io.imread(fn, dtype='float')] 
print(images) 
images_actual_data = np.stack(images) 
images_actual_data = 2.5*(images_actual_data - 0.5) # normalize values 



dataset = common_flags.create_dataset(split_name=FLAGS.split_name) 
modelout = common_flags.create_model(dataset.num_char_classes, 
            dataset.max_sequence_length, 
            dataset.num_of_views, dataset.null_code) 
endpoints = model.Model.create_base(images_placeholder, labels_one_hot=None) 

with tf.Session() as sess: 
    init_fn = model.create_init_fn_to_restore('/nsfs/tensor_models/models/research/attention_ocr/python/inception_v3.ckpt', '') 
    init_fn(sess) 
    sess.run(tf.global_variables_initializer()) 
    predictions = sess.run(endpoints.predicted_chars, feed_dict={images_placeholder:images_actual_data.reshape(1,imHeight,imWidth,imChannel)}) 
    print predictions 

i den folgenden Fehler erhalten:

INFO 2017-11-20 15:08:46.000545: fsns.py: 130 Using FSNS dataset split_name=train dataset_dir=/nsfs/tensor_models/models/research/attention_ocr/python/datasets/data/fsns 
Traceback (most recent call last): 
    File "run_tf.py", line 31, in <module> 
    endpoints = model.Model.create_base(images_placeholder, labels_one_hot=None) 
TypeError: unbound method create_base() must be called with Model instance as first argument (got Tensor instance instead) 

Ich bin neu zu Python, so Irgendeine Idee, die helfen kann? Dank

+2

Ordinary Methoden (nicht staticmethods oder Class) ist nur sinnvoll, wenn auf einer bestimmten Instanz der Klasse aufgerufen, nicht die Klasse selbst. Vielleicht möchtest du 'model.Model(). Create_base (...)'. Oder das 'create_model()' in der vorherigen Zeile hat eine Instanz dieses Modells zurückgegeben. In diesem Fall können Sie 'modelout.create_base()' verwenden. Oder vielleicht hätte es eine statische Methode sein sollen, wenn es sich wirklich nicht auf eine Instanz beziehen muss. – jasonharper

+0

Was hindert Sie daran, ein Objekt von Model() einzufügen und dann create_base darauf aufzurufen? – BoboDarph

+0

@ jasonharper 'modelout.create_base()' das hat tatsächlich funktioniert, danke – ibr

Antwort

0

wie es in den Kommentaren geraten war, habe ich

endpoints = modelout.create_base(images_placeholder, labels_one_hot=None) 

und es funktionierte

Verwandte Themen