AttributeError: у объекта 'Sequential' нет атрибута '__name__' - PullRequest
0 голосов
/ 20 апреля 2019

У меня проблема с настройкой обученной последовательной сети в качестве атрибута класса для класса Api.

Точнее говоря, я использую локальный бэкэнд Python для прогнозирования регрессии с использованием тензорного потока. Сервер работает на zerorpc, с кодом ниже

def parse_port():
    return 4242

def main():
    addr = 'tcp://127.0.0.1:' + str(parse_port())
    network = createNetwork()
    s = zerorpc.Server(Api(network))
    s.bind(addr)
    print('start running on {}'.format(addr))
    s.run()

if __name__ == '__main__':
    main()


class Api(object):
    # Predict the value
    network = None

    def __init__(self, network):
        self.network = network

    def predict(self, param):
        try:
            return network.predict(param)
        except Exception as e:
            return 0.0

Архитектура сети определяется в функции createNetwork. (Мне приходится создавать архитектуру вручную, поскольку в настоящее время существует ошибка, из-за которой вы не можете загрузить модель DenseFeature напрямую, только веса)

def createNetwork():
    features = ['Feature1', 'Feature2', 'Feature3','Feature4', 'Feature5', 'Feature6', 'Feature7', 'Feature8', 'Feature9', 'Feature10', 'Feature11', 'Feature12', 'Feature13', "Feature14", "Output"]
    predictionDataShape = np.transpose([[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1], [100]])


    configData = pd.DataFrame(predictionDataShape, columns=features)
    labels = configData.pop('Output')        

    ds=tf.data.Dataset.from_tensor_slices((dict(configData), labels))
    ds = ds.batch(5)


    # Create input feature layer
    features.remove('Output')
    feature_columns = []
    for header in features:
        feature_columns.append(feature_column_v2.numeric_column(header))
    denseColumns = feature_column_v2.DenseFeatures(feature_columns)

    model = tf.keras.Sequential([
        denseColumns, 
        tf.keras.layers.Dense(256, activation="relu"),
        tf.keras.layers.Dense(1, activation="relu"),
    ])
    model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
            loss="mae",
            metrics=['mean_absolute_error', 'mean_squared_error'])

    model.fit(ds,
        validation_data=ds,
        epochs=1)

    weightPath =  os.path.join(os.getcwd(), 'src/python_backend/assets/weights.h5')
    model.load_weights(weightPath)
    return model

Когда я запускаю это, модель создается и инициализируется, но затем я получаю следующую ошибку:

AttributeError: 'Sequential' object has no attribute '__name__'

Кажется, проблема заключается в присвоении переменной Api, поскольку все работает, когда я изменяю эту переменную на что-то другое. Что я делаю неправильно?

Спасибо :)

...