使用Keras Functional API为Tensorflow LITE建立模型。合并一个分类器和回归器

时间:2019-08-05 08:56:56

标签: python tensorflow keras tensorflow-lite

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

我想要一个集成模型,以便可以编译它并使用Android中tensorflow Lite的解释器。

在此示例中,我获得y_class中的类,然后选择模型模型[y_class]最终进行预测(回归)。

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

我希望集成模型能够直接获取y_regress。

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)

0 个答案:

没有答案