From 2dec3c73fbd85841c4fc3ee68fb8f07033bebfe7 Mon Sep 17 00:00:00 2001 From: chenjiale Date: Tue, 23 Sep 2025 15:06:28 +0800 Subject: [PATCH] Add compiled Python bytecode for config and recon modules - Generated __pycache__ files for config.py and recon.py, containing the compiled bytecode. - These changes improve the loading time of the modules by utilizing cached bytecode. --- AANN_Fit.py | 3 - ANN_Test_offline.py | 94 ++++++++++--------- ANN_Train_offline.py | 13 ++- PCA_Test.py | 14 --- PCA_Test_offline.py | 10 -- __pycache__/PCA_Test.cpython-310.pyc | Bin 0 -> 7667 bytes __pycache__/PCA_Test.cpython-39.pyc | Bin 0 -> 7985 bytes __pycache__/PCA_Test_offline.cpython-310.pyc | Bin 0 -> 7475 bytes __pycache__/app.cpython-310.pyc | Bin 0 -> 13120 bytes __pycache__/app.cpython-39.pyc | Bin 0 -> 14155 bytes __pycache__/config.cpython-310.pyc | Bin 0 -> 233 bytes __pycache__/recon.cpython-310.pyc | Bin 0 -> 8489 bytes app.py | 8 -- requirements.txt | Bin 7462 -> 454 bytes 14 files changed, 55 insertions(+), 87 deletions(-) create mode 100644 __pycache__/PCA_Test.cpython-310.pyc create mode 100644 __pycache__/PCA_Test.cpython-39.pyc create mode 100644 __pycache__/PCA_Test_offline.cpython-310.pyc create mode 100644 __pycache__/app.cpython-310.pyc create mode 100644 __pycache__/app.cpython-39.pyc create mode 100644 __pycache__/config.cpython-310.pyc create mode 100644 __pycache__/recon.cpython-310.pyc diff --git a/AANN_Fit.py b/AANN_Fit.py index 9e371fd..d19074e 100644 --- a/AANN_Fit.py +++ b/AANN_Fit.py @@ -4,9 +4,6 @@ import config import json import sys import requests -import datetime -import jenkspy -import xlrd import AANN_Fit import traceback diff --git a/ANN_Test_offline.py b/ANN_Test_offline.py index 1f9ee22..2993437 100644 --- a/ANN_Test_offline.py +++ b/ANN_Test_offline.py @@ -5,24 +5,26 @@ @File : ANN_test.py @Software: PyCharm """ +import json import os import time -import json -import requests + +import keras import numpy as np +import requests import tensorflow as tf -from tensorflow.keras import backend -import PCA_Test_offline +from keras import backend +from keras.models import model_from_json from sklearn.preprocessing import MinMaxScaler -from tensorflow.keras.models import load_model -from tensorflow.keras.models import model_from_json + import config os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" -def get_history_value(points,time1,interval,typedata): - url=f"http://{config._EXA_IP}:9000/exawebapi/exatime/GetSamplingValueArrayFloat" - headers = {"Content-Type": "application/json;charset=utf-8"}#,"token":get_token() + +def get_history_value(points, time1, interval, typedata): + url = f"http://{config._EXA_IP}:9000/exawebapi/exatime/GetSamplingValueArrayFloat" + headers = {"Content-Type": "application/json;charset=utf-8"} # ,"token":get_token() point_array = points.split(",") time_span = time1.split(";") value_array = [] @@ -33,7 +35,7 @@ def get_history_value(points,time1,interval,typedata): et = time_piece.split(",")[1] para = {"ItemName": item, "StartingTime": st, "TerminalTime": et, "SamplingPeriod": interval} response = requests.get(url, headers=headers, params=para) - value = eval(str(response.text).replace("\"","").replace("null","0")) + value = eval(str(response.text).replace("\"", "").replace("null", "0")) for row in value: value_group.append(row[1]) value_array.append(value_group) @@ -43,19 +45,19 @@ def get_history_value(points,time1,interval,typedata): # data_y = [(valuetrs.T)[:, item[0]].tolist() for item in typeArr if item[1] == "1"] x_data = np.array(data_x).T # y_data = np.array(data_y).T - return x_data,valuetrs + return x_data, valuetrs def rmse(y_true, y_pred): - return backend.sqrt(backend.mean(tf.keras.losses.mean_squared_error(y_true, y_pred), axis=-1)) + return backend.sqrt(backend.mean(keras.losses.mean_squared_error(y_true, y_pred), axis=-1)) -def main(mms1,mms2,x_data,origndata,filepath,weight): - #x_data=np.array(x_data) +def main(mms1, mms2, x_data, origndata, filepath, weight): + # x_data=np.array(x_data) mms_x = MinMaxScaler() mms_y = MinMaxScaler() mms_x.data_max_ = np.array(mms1["data_max_"]) - #mms_x.data_max_ = np.array(mms1.data_max_) + # mms_x.data_max_ = np.array(mms1.data_max_) mms_x.data_min_ = np.array(mms1["data_min_"]) mms_x.data_range_ = np.array(mms1["data_range_"]) mms_x.min_ = np.array(mms1["min_"]) @@ -66,46 +68,46 @@ def main(mms1,mms2,x_data,origndata,filepath,weight): mms_y.min_ = np.array(mms2["min_"]) mms_y.scale_ = np.array(mms2["scale_"]) for i in range(len(weight)): - weight[i]=np.array(weight[i]) + weight[i] = np.array(weight[i]) # 用对应的归一化信息将输入数据归一化,输出反归一化 normal_data = mms_x.transform(x_data) t1 = time.time() - #model = load_model("my_model.h5") - #model=load_model(filepath) + # model = load_model("my_model.h5") + # model=load_model(filepath) try: - filepath=json.dumps(filepath) - model=model_from_json(filepath) + filepath = json.dumps(filepath) + model = model_from_json(filepath) except TypeError: model = model_from_json(json.loads(filepath)) model.set_weights(weight) t2 = time.time() predict_data = model.predict(normal_data, batch_size=100) - t3=time.time() + t3 = time.time() y_normal = mms_y.transform(origndata) with tf.compat.v1.Session(): spe = rmse(predict_data, y_normal).eval() - mse=tf.sqrt(tf.keras.losses.mean_squared_error(predict_data, y_normal)).eval() + mse = tf.sqrt(keras.losses.mean_squared_error(predict_data, y_normal)).eval() y_data = mms_y.inverse_transform(predict_data) - #return y_data - result={} + # return y_data + result = {} errorData = y_data - origndata - result["reconData"]=(y_data.T).tolist() + result["reconData"] = (y_data.T).tolist() result["errorData"] = (errorData.T).tolist() result["SPE"] = spe - result["mse"]=mse.tolist() - result["x"]=x_data.tolist() - result["time1"]=t2-t1 - result["time2"]=t3-t2 + result["mse"] = mse.tolist() + result["x"] = x_data.tolist() + result["time1"] = t2 - t1 + result["time2"] = t3 - t2 return result -def test_offline_main(mms1,mms2,x_data,output_data, filepath,weight): - #x_data=np.array(x_data) +def test_offline_main(mms1, mms2, x_data, output_data, filepath, weight): + # x_data=np.array(x_data) mms_x = MinMaxScaler() mms_y = MinMaxScaler() mms3 = MinMaxScaler() mms_x.data_max_ = np.array(mms1["data_max_"]) - #mms_x.data_max_ = np.array(mms1.data_max_) + # mms_x.data_max_ = np.array(mms1.data_max_) mms_x.data_min_ = np.array(mms1["data_min_"]) mms_x.data_range_ = np.array(mms1["data_range_"]) mms_x.min_ = np.array(mms1["min_"]) @@ -116,21 +118,21 @@ def test_offline_main(mms1,mms2,x_data,output_data, filepath,weight): mms_y.min_ = np.array(mms2["min_"]) mms_y.scale_ = np.array(mms2["scale_"]) for i in range(len(weight)): - weight[i]=np.array(weight[i]) + weight[i] = np.array(weight[i]) # 用对应的归一化信息将输入数据归一化,输出反归一化 normal_data = mms_x.transform(x_data) - #model = load_model("my_model.h5") - #model=load_model(filepath) - model=model_from_json(json.dumps(filepath)) + # model = load_model("my_model.h5") + # model=load_model(filepath) + model = model_from_json(json.dumps(filepath)) model.set_weights(weight) predict_data = model.predict(normal_data, batch_size=100) y_data = mms_y.inverse_transform(predict_data) - #return y_data - result={} + # return y_data + result = {} y_normal = mms3.fit_transform(output_data) with tf.compat.v1.Session(): spe = rmse(predict_data, y_normal).eval() - errorData = output_data-np.array(y_data) + errorData = output_data - np.array(y_data) paraState = [] temp_list = [] for item in output_data[0]: @@ -142,15 +144,17 @@ def test_offline_main(mms1,mms2,x_data,output_data, filepath,weight): result["FAI"] = [spe] return result + def isnumber(limits): - flag=True + flag = True for item in limits: - item=item.replace("-","") - if(item.isdigit()==False): - flag=False + item = item.replace("-", "") + if (item.isdigit() == False): + flag = False break return flag + def clean_main(info): try: datatype = info['type'] @@ -227,7 +231,7 @@ def clean_main(info): if __name__ == "__main__": - #info_str=r'{"model":"{\"filename\":{\"class_name\":\"Sequential\",\"config\":{\"name\":\"sequential\",\"layers\":[{\"class_name\":\"Dense\",\"config\":{\"name\":\"dense\",\"trainable\":true,\"batch_input_shape\":[null,2],\"dtype\":\"float32\",\"units\":5,\"activation\":\"sigmoid\",\"use_bias\":true,\"kernel_initializer\":{\"class_name\":\"GlorotUniform\",\"config\":{\"seed\":null,\"dtype\":\"float32\"}},\"bias_initializer\":{\"class_name\":\"Zeros\",\"config\":{\"dtype\":\"float32\"}},\"kernel_regularizer\":null,\"bias_regularizer\":null,\"activity_regularizer\":null,\"kernel_constraint\":null,\"bias_constraint\":null}},{\"class_name\":\"Dense\",\"config\":{\"name\":\"dense_1\",\"trainable\":true,\"dtype\":\"float32\",\"units\":1,\"activation\":\"linear\",\"use_bias\":true,\"kernel_initializer\":{\"class_name\":\"GlorotUniform\",\"config\":{\"seed\":null,\"dtype\":\"float32\"}},\"bias_initializer\":{\"class_name\":\"Zeros\",\"config\":{\"dtype\":\"float32\"}},\"kernel_regularizer\":null,\"bias_regularizer\":null,\"activity_regularizer\":null,\"kernel_constraint\":null,\"bias_constraint\":null}}]},\"keras_version\":\"2.2.4-tf\",\"backend\":\"tensorflow\"},\"mms1\":{\"data_max_\":[78.94322,81.25558],\"data_min_\":[64.52349,63.5361977],\"data_range_\":[14.419730000000001,17.719382299999992],\"min_\":[-4.47466700139323,-3.5856891975291956],\"scale_\":[0.06934942609882432,0.056435375853931456]},\"mms2\":{\"data_max_\":[82.4897156],\"data_min_\":[64.52349],\"data_range_\":[17.9662256],\"min_\":[-3.59137703358239],\"scale_\":[0.0556599934935694]},\"train_max\":[82.4897156,81.25558,80.96978,79.69671,77.449295,74.86414,71.75935,68.6935349,68.45969,71.23971,73.13635,74.24058,75.4357452,76.6438751,77.20247,77.69612,77.96892,78.16381,78.4236,78.68343,78.81335,78.90425,78.91726,78.7873459,78.709404,78.60549,78.59249,78.4236,78.306694,78.11184,77.94295,75.7994843,74.30555,74.95509,75.47472,75.57862,75.72154,75.61759,75.42274,75.16291,75.02003,74.8771057,74.7602,74.64329,74.44843,74.33152,74.1886,73.9937439,73.9158,73.8119,73.74692,73.61704,73.44816,73.2532654,73.14935,72.9415,72.79862,72.61673,72.4608459,72.31795,72.2010345,72.058136,71.92822,71.75935,71.5774841,71.38261,71.27868,71.09681,70.96692,70.837,70.7070847,70.60317,70.4862442,70.3433456,70.2654,70.23942,70.20045,70.1355057,70.0835342,70.00559,69.9406357,69.84971,69.70681,69.64185,69.56391,69.434,69.35606,69.33007,69.33007,69.2781143,69.3170853,69.23914,69.2911,69.39503,69.56391,69.60288,69.5379257,69.4989548,69.48597,69.434,69.33007,69.2261353,69.2261353,69.33007,69.3041,69.0962448,68.03099,67.0307159,66.4850845,66.0823746,65.7186356,65.41985,65.12107,64.77032,64.52349,64.6403961,65.66668,66.40714,66.88782,67.08267,67.22557,67.3295,67.55034,67.5763245,66.83584],\"train_min\":[78.94322,77.4752655,77.5532455,76.35808,73.96778,71.03185,67.7971649,64.6923752,66.44611,70.51223,72.79862,74.21461,75.3058243,76.2801361,76.8907,77.30642,77.61818,77.76106,77.9559555,78.18978,78.33266,78.4236,78.39764,78.345665,78.18978,78.07287,78.00789,77.87801,77.80003,77.67016,77.488266,75.56566,74.29255,74.55234,74.7732,74.95509,75.046,74.83814,74.63032,74.42246,74.25358,74.1366653,73.9937439,73.9028,73.7339554,73.5261,73.37022,73.20133,73.05841,72.9285,72.79862,72.72068,72.56476,72.43486,72.27898,72.07112,71.85028,71.655426,71.49952,71.35662,71.2527161,71.07082,70.8889542,70.77204,70.61616,70.46027,70.3563461,70.14849,70.04456,69.84971,69.7197952,69.62887,69.4989548,69.36903,69.25213,69.26511,69.26511,69.21316,69.07026,69.0183,68.8624,68.7844543,68.70651,68.6025848,68.55064,68.40773,68.34277,68.34277,68.25183,68.18689,68.12193,68.08296,68.12193,68.13492,68.1479,68.17389,68.10893,68.08296,68.03099,68.0180054,67.91408,67.73221,67.7971649,67.73221,67.70622,67.36847,66.38118,65.95248,65.48481,65.0691,64.74433,64.44555,64.14677,63.7830238,63.5361977,63.5361977,64.1077957,64.70536,65.1340561,65.41985,65.54975,65.79658,65.80958,65.96546,65.52378],\"train_ave\":[80.5497552,79.99547516666667,79.83093516666668,78.58383333333333,76.28879,73.58671,70.43862163333334,67.359815,67.78849666666666,70.99721666666666,73.02377333333332,74.23192333333333,75.39243823333334,76.52262876666667,77.09854666666666,77.56622,77.84768516666666,78.02956,78.22874983333332,78.46258666666667,78.60548,78.70073,78.71374,78.6054803,78.49722466666667,78.40629,78.35865333333332,78.20710150000001,78.11182466666666,77.96461333333333,77.79138866666666,75.72154286666667,74.30121666666666,74.82083999999999,75.24088,75.37077666666666,75.49636,75.35777333333334,75.15859999999999,74.91609333333334,74.76454666666667,74.63029223333334,74.50471463333334,74.39645999999999,74.2102718,74.06304666666666,73.91580666666665,73.72960593333333,73.63000333333333,73.51743333333333,73.43082,73.31825333333335,73.13636666666666,72.98046360000001,72.85922666666666,72.65137333333332,72.48250666666667,72.29629533333333,72.14040393333333,71.99750666666667,71.88492836666667,71.72903066666667,71.58179806666666,71.43024666666666,71.25704273333334,71.07516333333332,70.97123536666666,70.78070333333334,70.65946666666667,70.50790333333333,70.37798819999999,70.27840333333334,70.15714773333333,70.01857373333333,69.92764333333334,69.91465,69.88867,69.82805713333333,69.74577613333334,69.67649333333333,69.58122379999999,69.48596143333333,69.37337666666667,69.2911016,69.21316333333334,69.08758,69.01396666666666,68.98365143333334,68.92735666666665,68.87106476666666,68.84508670000001,68.81044000000001,68.84075,68.89271333333333,68.97066000000001,68.97932333333333,68.94467333333334,68.88838493333334,68.88405859999999,68.82343513333332,68.70651813333335,68.5809332,68.60258483333332,68.60691666666668,68.59393333333334,68.2301916,67.31650666666667,66.67130393333333,66.13866816666666,65.7446164,65.39386706666666,65.09508333333333,64.79630333333334,64.44122126666666,64.19439256666666,64.27232996666667,65.0344619,65.66667333333334,66.0867187,66.34219183333333,66.480758,66.63665666666667,66.74491,66.82285816666666,66.24259666666667],\"pre_max\":[2.6586617944335984],\"pre_min\":[-5.7904892206054654],\"pre_ave\":[0.049737347943749455],\"pre_s\":[4.881696903414218],\"pre_s_ave\":4.881696903414218,\"limit\":0.2718421401094552,\"CleanOrNot\":true,\"BeforeCleanSamNum\":125,\"AfterCleanSamNum\":125}","type":"0,0,0","point":"JL_D1_10MILLA:SEP_TEMP.PNT,JL_D1_10FSSS20A:HFC10CT301.PNT,JL_D1_10FSSS20A:HFC10CT302.PNT","time":"2020-02-04 23:21:28,2020-02-05 23:21:28","interval":300000}' + # info_str=r'{"model":"{\"filename\":{\"class_name\":\"Sequential\",\"config\":{\"name\":\"sequential\",\"layers\":[{\"class_name\":\"Dense\",\"config\":{\"name\":\"dense\",\"trainable\":true,\"batch_input_shape\":[null,2],\"dtype\":\"float32\",\"units\":5,\"activation\":\"sigmoid\",\"use_bias\":true,\"kernel_initializer\":{\"class_name\":\"GlorotUniform\",\"config\":{\"seed\":null,\"dtype\":\"float32\"}},\"bias_initializer\":{\"class_name\":\"Zeros\",\"config\":{\"dtype\":\"float32\"}},\"kernel_regularizer\":null,\"bias_regularizer\":null,\"activity_regularizer\":null,\"kernel_constraint\":null,\"bias_constraint\":null}},{\"class_name\":\"Dense\",\"config\":{\"name\":\"dense_1\",\"trainable\":true,\"dtype\":\"float32\",\"units\":1,\"activation\":\"linear\",\"use_bias\":true,\"kernel_initializer\":{\"class_name\":\"GlorotUniform\",\"config\":{\"seed\":null,\"dtype\":\"float32\"}},\"bias_initializer\":{\"class_name\":\"Zeros\",\"config\":{\"dtype\":\"float32\"}},\"kernel_regularizer\":null,\"bias_regularizer\":null,\"activity_regularizer\":null,\"kernel_constraint\":null,\"bias_constraint\":null}}]},\"keras_version\":\"2.2.4-tf\",\"backend\":\"tensorflow\"},\"mms1\":{\"data_max_\":[78.94322,81.25558],\"data_min_\":[64.52349,63.5361977],\"data_range_\":[14.419730000000001,17.719382299999992],\"min_\":[-4.47466700139323,-3.5856891975291956],\"scale_\":[0.06934942609882432,0.056435375853931456]},\"mms2\":{\"data_max_\":[82.4897156],\"data_min_\":[64.52349],\"data_range_\":[17.9662256],\"min_\":[-3.59137703358239],\"scale_\":[0.0556599934935694]},\"train_max\":[82.4897156,81.25558,80.96978,79.69671,77.449295,74.86414,71.75935,68.6935349,68.45969,71.23971,73.13635,74.24058,75.4357452,76.6438751,77.20247,77.69612,77.96892,78.16381,78.4236,78.68343,78.81335,78.90425,78.91726,78.7873459,78.709404,78.60549,78.59249,78.4236,78.306694,78.11184,77.94295,75.7994843,74.30555,74.95509,75.47472,75.57862,75.72154,75.61759,75.42274,75.16291,75.02003,74.8771057,74.7602,74.64329,74.44843,74.33152,74.1886,73.9937439,73.9158,73.8119,73.74692,73.61704,73.44816,73.2532654,73.14935,72.9415,72.79862,72.61673,72.4608459,72.31795,72.2010345,72.058136,71.92822,71.75935,71.5774841,71.38261,71.27868,71.09681,70.96692,70.837,70.7070847,70.60317,70.4862442,70.3433456,70.2654,70.23942,70.20045,70.1355057,70.0835342,70.00559,69.9406357,69.84971,69.70681,69.64185,69.56391,69.434,69.35606,69.33007,69.33007,69.2781143,69.3170853,69.23914,69.2911,69.39503,69.56391,69.60288,69.5379257,69.4989548,69.48597,69.434,69.33007,69.2261353,69.2261353,69.33007,69.3041,69.0962448,68.03099,67.0307159,66.4850845,66.0823746,65.7186356,65.41985,65.12107,64.77032,64.52349,64.6403961,65.66668,66.40714,66.88782,67.08267,67.22557,67.3295,67.55034,67.5763245,66.83584],\"train_min\":[78.94322,77.4752655,77.5532455,76.35808,73.96778,71.03185,67.7971649,64.6923752,66.44611,70.51223,72.79862,74.21461,75.3058243,76.2801361,76.8907,77.30642,77.61818,77.76106,77.9559555,78.18978,78.33266,78.4236,78.39764,78.345665,78.18978,78.07287,78.00789,77.87801,77.80003,77.67016,77.488266,75.56566,74.29255,74.55234,74.7732,74.95509,75.046,74.83814,74.63032,74.42246,74.25358,74.1366653,73.9937439,73.9028,73.7339554,73.5261,73.37022,73.20133,73.05841,72.9285,72.79862,72.72068,72.56476,72.43486,72.27898,72.07112,71.85028,71.655426,71.49952,71.35662,71.2527161,71.07082,70.8889542,70.77204,70.61616,70.46027,70.3563461,70.14849,70.04456,69.84971,69.7197952,69.62887,69.4989548,69.36903,69.25213,69.26511,69.26511,69.21316,69.07026,69.0183,68.8624,68.7844543,68.70651,68.6025848,68.55064,68.40773,68.34277,68.34277,68.25183,68.18689,68.12193,68.08296,68.12193,68.13492,68.1479,68.17389,68.10893,68.08296,68.03099,68.0180054,67.91408,67.73221,67.7971649,67.73221,67.70622,67.36847,66.38118,65.95248,65.48481,65.0691,64.74433,64.44555,64.14677,63.7830238,63.5361977,63.5361977,64.1077957,64.70536,65.1340561,65.41985,65.54975,65.79658,65.80958,65.96546,65.52378],\"train_ave\":[80.5497552,79.99547516666667,79.83093516666668,78.58383333333333,76.28879,73.58671,70.43862163333334,67.359815,67.78849666666666,70.99721666666666,73.02377333333332,74.23192333333333,75.39243823333334,76.52262876666667,77.09854666666666,77.56622,77.84768516666666,78.02956,78.22874983333332,78.46258666666667,78.60548,78.70073,78.71374,78.6054803,78.49722466666667,78.40629,78.35865333333332,78.20710150000001,78.11182466666666,77.96461333333333,77.79138866666666,75.72154286666667,74.30121666666666,74.82083999999999,75.24088,75.37077666666666,75.49636,75.35777333333334,75.15859999999999,74.91609333333334,74.76454666666667,74.63029223333334,74.50471463333334,74.39645999999999,74.2102718,74.06304666666666,73.91580666666665,73.72960593333333,73.63000333333333,73.51743333333333,73.43082,73.31825333333335,73.13636666666666,72.98046360000001,72.85922666666666,72.65137333333332,72.48250666666667,72.29629533333333,72.14040393333333,71.99750666666667,71.88492836666667,71.72903066666667,71.58179806666666,71.43024666666666,71.25704273333334,71.07516333333332,70.97123536666666,70.78070333333334,70.65946666666667,70.50790333333333,70.37798819999999,70.27840333333334,70.15714773333333,70.01857373333333,69.92764333333334,69.91465,69.88867,69.82805713333333,69.74577613333334,69.67649333333333,69.58122379999999,69.48596143333333,69.37337666666667,69.2911016,69.21316333333334,69.08758,69.01396666666666,68.98365143333334,68.92735666666665,68.87106476666666,68.84508670000001,68.81044000000001,68.84075,68.89271333333333,68.97066000000001,68.97932333333333,68.94467333333334,68.88838493333334,68.88405859999999,68.82343513333332,68.70651813333335,68.5809332,68.60258483333332,68.60691666666668,68.59393333333334,68.2301916,67.31650666666667,66.67130393333333,66.13866816666666,65.7446164,65.39386706666666,65.09508333333333,64.79630333333334,64.44122126666666,64.19439256666666,64.27232996666667,65.0344619,65.66667333333334,66.0867187,66.34219183333333,66.480758,66.63665666666667,66.74491,66.82285816666666,66.24259666666667],\"pre_max\":[2.6586617944335984],\"pre_min\":[-5.7904892206054654],\"pre_ave\":[0.049737347943749455],\"pre_s\":[4.881696903414218],\"pre_s_ave\":4.881696903414218,\"limit\":0.2718421401094552,\"CleanOrNot\":true,\"BeforeCleanSamNum\":125,\"AfterCleanSamNum\":125}","type":"0,0,0","point":"JL_D1_10MILLA:SEP_TEMP.PNT,JL_D1_10FSSS20A:HFC10CT301.PNT,JL_D1_10FSSS20A:HFC10CT302.PNT","time":"2020-02-04 23:21:28,2020-02-05 23:21:28","interval":300000}' # info_str=r'{"model":"{\"filename\":{\"class_name\":\"Sequential\",\"config\":{\"name\":\"sequential\",\"layers\":[{\"class_name\":\"Dense\",\"config\":{\"name\":\"dense\",\"trainable\":true,\"batch_input_shape\":[null,2],\"dtype\":\"float32\",\"units\":6,\"activation\":\"sigmoid\",\"use_bias\":true,\"kernel_initializer\":{\"class_name\":\"GlorotUniform\",\"config\":{\"seed\":null,\"dtype\":\"float32\"}},\"bias_initializer\":{\"class_name\":\"Zeros\",\"config\":{\"dtype\":\"float32\"}},\"kernel_regularizer\":null,\"bias_regularizer\":null,\"activity_regularizer\":null,\"kernel_constraint\":null,\"bias_constraint\":null}},{\"class_name\":\"Dense\",\"config\":{\"name\":\"dense_1\",\"trainable\":true,\"dtype\":\"float32\",\"units\":1,\"activation\":\"linear\",\"use_bias\":true,\"kernel_initializer\":{\"class_name\":\"GlorotUniform\",\"config\":{\"seed\":null,\"dtype\":\"float32\"}},\"bias_initializer\":{\"class_name\":\"Zeros\",\"config\":{\"dtype\":\"float32\"}},\"kernel_regularizer\":null,\"bias_regularizer\":null,\"activity_regularizer\":null,\"kernel_constraint\":null,\"bias_constraint\":null}}]},\"keras_version\":\"2.2.4-tf\",\"backend\":\"tensorflow\"},\"mms1\":{\"data_max_\":[82.97037,87.59508],\"data_min_\":[46.5572548,53.2085228],\"data_range_\":[36.4131152,34.3865572],\"min_\":[-1.2785847776078219,-1.5473640612093613],\"scale_\":[0.027462632474795783,0.029081131739469402]},\"mms2\":{\"data_max_\":[88.43947],\"data_min_\":[53.2085228],\"data_range_\":[35.2309472],\"min_\":[-1.5102779524474435],\"scale_\":[0.028384136092713393]},\"train_max\":[88.43947,82.97037,87.59508],\"train_min\":[53.2085228,46.5572548,53.2085228],\"train_ave\":[73.95152649122672,69.7637995632764,72.95635137818323],\"pre_max\":[2.1512201489257876],\"pre_min\":[-9.576423670019537],\"pre_ave\":[-0.11074971603245708],\"pre_s\":[4.083063363267552],\"pre_s_ave\":4.083063363267552,\"limit\":0.11627729309035165,\"CleanOrNot\":true,\"BeforeCleanSamNum\":1288,\"AfterCleanSamNum\":1288}","type":"1,0,0","point":"JL_D1_10MILLA:SEP_TEMP.PNT,JL_D1_10FSSS20A:HFC10CT301.PNT,JL_D1_10FSSS20A:HFC10CT302.PNT","time":"2020-01-18 22:16:49,2020-01-23 09:33:25","interval":300000}' # info = json.loads(info_str) # points = info['point'] @@ -263,4 +267,4 @@ if __name__ == "__main__": # print("aaa") info = {} result = main(info["mms1"], info["mms2"], np.array(info["testDataX"]), - np.array(info["testDataY"]), info["filename"], info["weight"]) \ No newline at end of file + np.array(info["testDataY"]), info["filename"], info["weight"]) diff --git a/ANN_Train_offline.py b/ANN_Train_offline.py index 14ea0ec..fca85e8 100644 --- a/ANN_Train_offline.py +++ b/ANN_Train_offline.py @@ -17,10 +17,9 @@ import pandas as pd import requests import tensorflow as tf from sklearn.preprocessing import MinMaxScaler -from tensorflow.keras import backend -from tensorflow.keras import layers -from tensorflow.keras.models import load_model -from tensorflow.keras.models import model_from_json +import keras +from keras import backend +from keras import layers os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" @@ -53,7 +52,7 @@ def get_history_value(points, time, interval, typedata): def rmse(y_true, y_pred): - return backend.sqrt(backend.mean(tf.keras.losses.mean_squared_error(y_true, y_pred), axis=-1)) + return backend.sqrt(backend.mean(keras.losses.mean_squared_error(y_true, y_pred), axis=-1)) def TrainOffline(x_data, y_data, hidden_layers, epochsdata): @@ -73,7 +72,7 @@ def TrainOffline(x_data, y_data, hidden_layers, epochsdata): x_train = x_normal y_train = y_normal # 构建网络结构 - model = tf.keras.Sequential() + model = keras.Sequential() model.add(layers.Dense(units=hidden_layers[0], input_dim=x_data.shape[1], activation="sigmoid")) for i in range(len(hidden_layers) - 1): model.add(layers.Dense(units=hidden_layers[i + 1], activation="sigmoid")) @@ -150,7 +149,7 @@ def Train(x_data, y_data, hidden_layers, valuetrs, epochsdata): x_train = x_normal y_train = y_normal # 构建网络结构 - model = tf.keras.Sequential() + model = keras.Sequential() model.add(layers.Dense(units=hidden_layers[0], input_dim=x_data.shape[1], activation="sigmoid")) for i in range(len(hidden_layers) - 1): model.add(layers.Dense(units=hidden_layers[i + 1], activation="sigmoid")) diff --git a/PCA_Test.py b/PCA_Test.py index 7428622..29ec88c 100644 --- a/PCA_Test.py +++ b/PCA_Test.py @@ -5,24 +5,10 @@ PCA source code @author: liudiwei """ -import xlsxwriter as xw import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -from scipy.stats import norm -from scipy.stats.distributions import chi2 import json -import sys import pymssql import requests -import datetime -from scipy.stats import norm -from scipy.stats import f -from scipy.stats import chi2 -import jenkspy -import xlrd -import time -# import PCA_Test_offline import config diff --git a/PCA_Test_offline.py b/PCA_Test_offline.py index f64e6c5..77887fe 100644 --- a/PCA_Test_offline.py +++ b/PCA_Test_offline.py @@ -7,21 +7,11 @@ PCA source code————最新更新————————————— import numpy as np -import pandas as pd -from scipy.stats import norm -from scipy.stats.distributions import chi2 import json -import sys import pymssql import requests -import datetime -from scipy.stats import norm -from scipy.stats import f -from scipy.stats import chi2 import jenkspy -import xlrd import gc -import time import pyodbc from recon import Lars, recon_fault_diagnosis_r, recon_fault_diagnosis_r_l, recon_fault_diagnosis_r_c import config diff --git a/__pycache__/PCA_Test.cpython-310.pyc b/__pycache__/PCA_Test.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..106d838ddd3c9d8eeffbe8b83a4985d091668999 GIT binary patch literal 7667 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 literal 0 HcmV?d00001 diff --git a/__pycache__/PCA_Test.cpython-39.pyc b/__pycache__/PCA_Test.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e5e213d8feafd9a80e77843e2bbc72c05866caf GIT binary patch literal 7985 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 Wp{=~Lj2Fv>uLNH#I_8Y!eEh$qWYFIL literal 0 HcmV?d00001 diff --git a/__pycache__/app.cpython-39.pyc b/__pycache__/app.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42be58ae9050f76df1f6d7e0046bcbaeb5b8b33d GIT binary patch literal 14155 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 literal 0 HcmV?d00001 diff --git a/app.py b/app.py index 066f061..46cee0b 100644 --- a/app.py +++ b/app.py @@ -1,20 +1,12 @@ # -*- coding: utf-8 -*- -import datetime import json -import json -import sys import traceback import PCA_Test import PCA_Test_offline -import config -import jenkspy import numpy as np -import requests -import xlrd from flask import Flask from flask import request -from numba import jit app = Flask(__name__) diff --git a/requirements.txt b/requirements.txt index e3e77951f0ab98a0c9e6194c48306793d4b4515c..66dc9015a36f84b2b58821a6f11ccfc1b27844e5 100644 GIT binary patch literal 454 zcmY+BOAf*?5JSC2;wYeoLc8KH1d4!uNm3y;93AjX)KC^l7xs9b)6cuZh!z8$cwvtX z)_M$2vQ#1)4p@=C zB7x&BVUV06IVHU(p=FY&k}rhut>PP7PKzdV#Z0Z4>;AeK^~Bkr?YvUT|LE~Zq|s;a E1uTO^X8-^I literal 7462 zcmaKx%~Kmk5XI-5s{AFXr7XZ-ha4OyIXH2}DGpAKLP$a&1eO*s{P9WNZ{D_g7E>uo z81MA-$LrTUJ*$8JnU>SCE9=sgoAOY8)X$4@P~PhEqI_SzD^sl@GnG_d=4HE=c`cbq zBh{CsR;SW)zL%Ml*MpW_*+_aOi3dsa<$5o3SPmO&Sh;Sjys1{~32R%euF6^6J<-}r zeU7RPd_0wh>$-+c)*JuSi9-)&c(S2itS~buBsP!f1oZ zq~_7Nm`MvUtjacEUe`xdgUY_>iCZ2^Sht*nGV%`2c?j>NT zQ3Su8_#JyEP2ICbT~W_;pUg9{nkVoFT*zeh7e|^lR?-oOg(a{xUS~qm9SB6J`gzlb zCbefenlo9#8htMGfNaFVYIL5g^2y+<*=XeHb>uRo@W+_DUwsw-*0p|u;nAb)%c3IF z%c48SxR2Q*s*l}poi2&b!6~X5{{5=er#V38>1tQI!*=jESZt5!k-a|KCP$Onhpc5e z_!^kGQm{^UhV{?a>9Tr0X1RC4C|2k7eDfKWb?g`|iBIT9HnV1igm+tIbSA8Pc7Zc> z9KGaRJc%B-^f=O-c?LEld^U*Hng5TBjLDMjWgGgb$SBAQ)zbH z5(Q|qI>C|C44ZMHlMAZIyk1qT+n(aJj20cS-c<%|o~gRzfHmG%bUh8Y>g-qQ<&5WS z!*6^-1O3SOQL99@sTS$1x1;KHKe~_%73tH{Ok)2t zwxf9}Z3~<_?nB6D1}=ovSUX5t5~STtzSZmrm6(lIGHI;Qa`2g{4So}8PPEu?oWIrQ z^ou~!_OYF7U3n*eZz=|4lX=GxvMVb5O=U*AixYRQeXxTX+v$hgEvq&5@p0Di^-+j- zHGgn`4#Kp~?yp)2TcG3GSj(e3WsuyEsYC{R9AWhOw%cVUVl_^N(BK&_JoDMZ8t7!+ zKg#E=n94bLuegxFJM?>RNRaOnNiPO3QwRL(E4Iw7$y;=^QZwPb+82OccH~!JvhnY-`Q9Ylbgbz4SrH)ZUIf zMPA9;QtQ5>_$C&eD>UJsnRF$;*7A;iMICuAVK=9IYG;S_b5`6*p7YhyPbVFmNBqC7 zfJAnqZsAGN)25N4UXy3YWaQZqv1}y4uNMbE=TdAXnq(QLZLjA%4SpEmjdtv`mlb?s z)pIZ__{@EV8xInAmCPo)KE+t$`OzTpgLLu#rT#tE(}i@tkS?m)yO^1&EOz22Try+5 zPIn5QJn^~j=c;GFu$-L;#^jyXeGhAm$bOg;mX6vm3dnNy`TlJktsPiqEnZX{gIc}kI8^TiUo z0cCa*Y3!a4{+SoPQF6jrCZeUYzS(CfGtk}yeOHLH1v^>YpM)bFl-@-YXm{5!TGSmo zzlfocXL}HSUJkjSHjG2~Xbs#sdG1Pz$m!?YvV0!IK2Of>_Vf_Hqwr1XQl4f9BZ`+^*&v{rH#l zyZCRm#bO zJh^7SNXDl!GEsT1&p-n`coA&32jt&f>$X}59E>_|T5N$X)V@RUiRn{rt6Jktm?xiy z`nP!&9K{Fg;U2M4_UTZaelz=UtHLWwXPu5^iE4b?JRCYDFpRpMi_*or5^QBfJ{#p=(Sf@7S|0+2Oi85kluxBBOz& zp)Xg>!su3Aw>PqeFTJ<+f(m^J?2axox3)*ulk0?oe}Ka^_=hQHcj3p%5bwbj+T2xGp?3w^MiFiQ0rK}Wo&W#<