2017-11-20 3 views
0

나는 다른 클래스에 존재하는 다른 스크립트에있는 함수를 호출하는 파이썬 스크립트가 있는데, 이미 스크립트를 가져 와서 함수에 액세스했지만 그 함수는 클래스 자체의 인스턴스 인 인수를 취합니다. 함수는 스크립트 model.py에 있고 그 안에 클래스는 Model 내부 Model 함수, model.py 내부의 함수라는클래스 인스턴스를 인수로 전달

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

그래서 난 다음 코드를 실행하면

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 

전 다음 오류가 발생합니다.

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) 

저는 Python을 처음 사용합니다. 도움이 될만한 아이디어가 있습니까? , 감사가 코멘트에 권고 한대로

+2

일반 방법 (staticmethods 또는 classmethods이 아닌) 클래스의 특정 인스턴스에서 호출하는 경우에만 의미가있는 일 클래스 그 자체가 아닙니다. 아마 당신은'model.Model(). create_base (...)'를 원한다. 또는 이전 줄의'create_model()'이이 Model의 인스턴스를 반환했을 수도 있습니다.이 경우'modelout.create_base()'를 사용할 수 있습니다. 또는 실제로 인스턴스를 참조 할 필요가없는 경우에는 정적 메서드 여야합니다. – jasonharper

+0

그럼 Model()의 객체를 인스턴스화하고 create_base를 호출하는 것을 중단시키는 것은 무엇입니까? – BoboDarph

+0

@ jasonharper'modelout.create_base()'실제로 작동했습니다. 감사합니다. – ibr

답변

0

, 내가

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

를 사용하고는