使用Keras函数API为Tensorflow LITE构建模型。合并一个分类器并进行回归

2024-09-28 20:53:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要建立一个模型,根据分类输出选择一个模型进行回归。在我的示例中,有3个独立的回归器和1个分类器。根据之前的分类选择回归模型

我想得到一个集成的模型,这样我就可以编译它并在Android中使用tensorflow Lite的解释器

在本例中,我在y_类中获取类,并选择模型[y_类],以最终进行预测(回归)

y_prob= clf.predict(test)
y_class = y_prob.argmax(axis=-1)[0]
y_regress = models[ y_class ].predict(test)

我希望集成模型能够直接得到y_回归

import pandas as pd
import numpy as np
from keras.layers import Input, Dense
from keras.models import Model
from keras import optimizers
import tensorflow.keras.backend as K
import keras

df = pd.read_csv('https://www.dropbox.com/s/jc36fdgmi43iy41/tflitetest.csv?dl=1')
df = df.iloc[:,1:]

X = df.iloc[:,0:12]     #data
y = df.iloc[:,12:14]    # Values for regression
f = df.f                # 3 classes

#building the classifier
inputx = Input(shape=(12,))
x = Dense(30, activation='sigmoid')(inputx)
floor =   Dense(3, activation='softmax')(x)
clf = Model(inputs=inputx,output=floor)
clf.compile(
            optimizer=keras.optimizers.Adadelta(),
            loss='sparse_categorical_crossentropy',
            metrics=['sparse_categorical_accuracy'])

clf.fit(X,f,epochs=200)

#building 3 independent Regressors
models = {}
for i in range(3):
    x = Dense(30, activation='sigmoid')(inputx)
    x = Dense(100, activation='sigmoid')(x)
    y1y2 = Dense(2)(x)

    models[i]= Model(inputs=inputx,output=y1y2)
    models[i].compile(
                optimizer='adam',
                loss='mean_squared_error',
                metrics=['accuracy'])

    models[i].fit(X[ f==i] , y[f==i] ,epochs=200)

test = X.iloc[-1].values.reshape((1,-1))

y_prob= clf.predict(test)
y_class = y_prob.argmax(axis=-1)[0]
y_regress = models[ y_class ].predict(test)

print(y_regress)

Tags: 模型testimportdfmodelsactivationpredictclass