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
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
Was hindert Sie daran, ein Objekt von Model() einzufügen und dann create_base darauf aufzurufen? – BoboDarph
@ jasonharper 'modelout.create_base()' das hat tatsächlich funktioniert, danke – ibr