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을 처음 사용합니다. 도움이 될만한 아이디어가 있습니까? , 감사가 코멘트에 권고 한대로
일반 방법 (staticmethods 또는 classmethods이 아닌) 클래스의 특정 인스턴스에서 호출하는 경우에만 의미가있는 일 클래스 그 자체가 아닙니다. 아마 당신은'model.Model(). create_base (...)'를 원한다. 또는 이전 줄의'create_model()'이이 Model의 인스턴스를 반환했을 수도 있습니다.이 경우'modelout.create_base()'를 사용할 수 있습니다. 또는 실제로 인스턴스를 참조 할 필요가없는 경우에는 정적 메서드 여야합니다. – jasonharper
그럼 Model()의 객체를 인스턴스화하고 create_base를 호출하는 것을 중단시키는 것은 무엇입니까? – BoboDarph
@ jasonharper'modelout.create_base()'실제로 작동했습니다. 감사합니다. – ibr