python type () и isinstance () не распознают экземпляр класса - PullRequest
5 голосов
/ 20 мая 2019

isinstance(object, classinfo) не распознает экземпляр класса.

Я напечатал type(object) и сам класс, чтобы убедиться, что они были одних и тех же типов.Они оба напечатали одно и то же, однако, когда я попытался type(object) == class, он вернул False.

, вот код для класса:

class Convolute(object):
    def __init__(self, channels, filter_shape, pool_shape, pool_type, stride_length=1):
        self.channels = channels
        self.filter_shape = filter_shape
        self.filters = [np.random.randn(filter_shape[0], filter_shape[1]) for i in range(channels)]
        self.biases = [random.random() for i in range (channels)]
        self.stride_length = stride_length
        self.pool_shape = pool_shape
        self.pool_type = pool_type

вот экземпляр класса:

con1 = n.Convolute(3, (4, 4), (4, 4), 0)

вот вывод в оболочке python, когда я пытался проверить, что они были одного типа:

>>> import network as n
>>> con1 = n.Convolute(3, (4, 4), (4, 4), 0)
>>> type(con1)
<class 'network.Convolute'>
>>> n.Convolute
<class 'network.Convolute'>
>>> type(con1) == n.Convolute
False
>>> isinstance(con1, n.Convolute)
False

Поскольку вывод type(con1) и n.Convolute кажетсячтобы быть идентичными, я ожидал, что isinstance() и type(con1) == n.Convolute вернут True, но они вернут `False '.Я, честно говоря, запутался, пожалуйста, помогите.

- РЕДАКТИРОВАТЬ -

type(con1).__name__ == n.Convolute.__name__ возвращает True но я до сих пор не знаю, почему ничего не работает

Проблематакже находится внутри файла, из которого я импортирую, я просто столкнулся с той же проблемой в самом файле, а не только когда я импортировал его.Вот код внутри программы:

class Network(object):

    #params for class are layers described by class e.g. ConvolutionalNetwork([Input([...]), Convolute([...]), Flatten(), Dense([...]), (Dense[...]]) 
    #__init__ and setflattensize functions initilize network structures
    def __init__(self, layers):
        self.layers = layers
        self.channels = [layers[0].channels]
        self.shapes = [layers[0].shape]
        for layer, index in zip(layers, range(len(layers))):
            if isinstance(layer, Flatten):
                self.setflattensize(layer, index)
            if isinstance(layer, Dense):
                layer.weights = np.random.randn(self.layers[index-1].size, layer.size) 
            #get list of channels and shapes/sizes that correspond with each layer
            if index>0:
                if self.channels[-1]*layer.channels == 0:
                    self.channels.append(1)
                else:
                    self.channels.append(self.channels[-1]*layer.channels)
                if isinstance(layer, Convolute):
                    self.shapes.append(((self.shapes[-1][0]-layer.filter_shape[0]+1)/layer.pool_shape[0], (self.shapes[-1][1]-layer.filter_shape[1]+1)/layer.pool_shape[1]))
                else:
                    self.shapes.append(layer.size)

if isinstance(layer, Convolute): возвращает False вместо True.Эта проблема более подробно объясняется ранее.

исполняемый код, который демонстрирует проблему: https://github.com/Ecart33/MachineLearning/blob/master/neural_net/network_debug.py

...