【问题标题】:Python Tensorflow how to use model from database?Python Tensorflow 如何使用数据库中的模型?
【发布时间】:2021-12-04 06:15:30
【问题描述】:

我是 StackOverflow 的新手,我的英语不太好。但我希望你能帮助我。我的问题是我有一个使用 tensorflow/keras 使用数据集创建的模型,但我不知道如何使用该模型来预测答案(0/1)。这是我的代码:

创建模型

import pandas as pd
from sklearn.model_selection import train_test_split
dataset = pd.read_csv("database2.csv")
x = dataset.drop(columns=["good/bad"])
y = dataset["good/bad"]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense
from sklearn.metrics import accuracy_score
model = Sequential()
model.add(Dense(units=32, activation="relu", input_dim=len(x_train.columns)))
model.add(Dense(units=64, activation="relu"))
model.add(Dense(units=1, activation="sigmoid"))
model.compile(loss="binary_crossentropy", optimizer="sgd", metrics=["accuracy"])
model.fit(x_train, y_train, epochs=200, batch_size=32)
y_hat = model.predict(x_test)
y_hat = [0 if val < 0.5 else 1 for val in y_hat]
print(accuracy_score(y_test, y_hat))
model.save("tfmodel2.model")

database2.csv

good/bad,version,ihl,len_,id_,frag,ttl,dport,seq,ack,dataofs,reserved,window,urgptr
1,4,5,52,12811,0,128,80,3370329709,0,8,0,64240,0
1,4,5,52,0,0,64,59331,1464637201,3370329710,8,0,64240,0
1,4,5,52,12812,0,128,80,3129455413,0,8,0,64240,0
1,4,5,52,0,0,64,59332,619700928,3129455414,8,0,64240,0
1,4,5,52,12813,0,128,80,3501094825,0,8,0,64240,0
1,4,5,52,0,0,64,59333,2779039288,3501094826,8,0,64240,0
1,4,5,40,12814,0,128,80,3370329710,1464637202,5,0,256,0
1,4,5,40,12815,0,128,80,3129455414,619700929,5,0,256,0
1,4,5,60,12816,0,128,80,3129455414,619700929,5,0,256,0
1,4,5,40,60164,0,64,59332,619700929,3129455434,5,0,502,0
1,4,5,480,12817,0,128,80,3129455434,619700929,5,0,256,0
1,4,5,40,60165,0,64,59332,619700929,3129455874,5,0,501,0
1,4,5,60,12818,0,128,80,3129455874,619700929,5,0,256,0
1,4,5,40,60166,0,64,59332,619700929,3129455894,5,0,501,0
1,4,5,1500,12819,0,128,80,3129455894,619700929,5,0,256,0
1,4,5,40,60167,0,64,59332,619700929,3129457354,5,0,501,0
1,4,5,80,12820,0,128,80,3129457354,619700929,5,0,256,0
1,4,5,40,60168,0,64,59332,619700929,3129457394,5,0,501,0
1,4,5,720,12821,0,128,80,3129457394,619700929,5,0,256,0
1,4,5,40,60169,0,64,59332,619700929,3129458074,5,0,501,0
1,4,5,60,12822,0,128,80,3370329710,1464637202,5,0,256,0
1,4,5,40,57184,0,64,59331,1464637202,3370329730,5,0,502,0
1,4,5,1500,12823,0,128,80,3129458074,619700929,5,0,256,0
1,4,5,40,60170,0,64,59332,619700929,3129459534,5,0,501,0
1,4,5,1500,12824,0,128,80,3129459534,619700929,5,0,256,0
1,4,5,40,60171,0,64,59332,619700929,3129460994,5,0,494,0
1,4,5,1340,12825,0,128,80,3370329730,1464637202,5,0,256,0
1,4,5,40,57185,0,64,59331,1464637202,3370331030,5,0,501,0
1,4,5,40,12826,0,128,80,3501094826,2779039289,5,0,256,0
1,4,5,200,12827,0,128,80,3370331030,1464637202,5,0,256,0
1,4,5,40,57186,0,64,59331,1464637202,3370331190,5,0,501,0
1,4,5,140,12828,0,128,80,3129460994,619700929,5,0,256,0
1,4,5,40,60172,0,64,59332,619700929,3129461094,5,0,501,0
1,4,5,1500,12829,0,128,80,3370331190,1464637202,5,0,256,0
1,4,5,40,57187,0,64,59331,1464637202,3370332650,5,0,501,0
1,4,5,60,12830,0,128,80,3501094826,2779039289,5,0,256,0
1,4,5,40,5921,0,64,59333,2779039289,3501094846,5,0,502,0

我如何使用此模型来预测如下内容:4,5,40,60185,0,64,59332,619701397,3129468394,5,0,501,0

【问题讨论】:

    标签: python pandas tensorflow machine-learning keras


    【解决方案1】:

    但你的代码中已经有了它:

    y_hat = model.predict(x_test)
    

    也许在它之后添加类似这样的东西:

    for i in range(len(y_hat)):
        print(x_test[i], y_hat[i])
    

    【讨论】:

    • 您的代码不起作用。回溯(最后一次调用):文件“/home/pi/sdfsdafs.py”,第 28 行,在 print(x_test[i], y_hat[i]) 文件“/home/pi/.local/lib /python3.7/site-packages/pandas/core/frame.py”,第 3024 行,在 getitem indexer = self.columns.get_loc(key) 文件“/home/pi/.local/ lib/python3.7/site-packages/pandas/core/indexes/base.py",第 3082 行,在 get_loc raise KeyError(key) from err KeyError: 0
    【解决方案2】:

    您的数据集非常小,您的超参数batch_sizelearning_rateepochs 需要进行调整。您的标签good/bad 始终为 1,这很奇怪。但无论如何,要对您的模型进行预测(实际上您已经在做),只需输出您的预测:

    dataset = pd.read_csv("database2.csv")
    x = dataset.drop(columns=["good/bad"])
    y = dataset["good/bad"]
    
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
    
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.optimizers import SGD
    
    from sklearn.metrics import accuracy_score
    
    optimizer = SGD(learning_rate=0.001)
    model = Sequential()
    model.add(Dense(units=32, activation="relu", input_dim=len(x_train.columns)))
    model.add(Dense(units=64, activation="relu"))
    model.add(Dense(units=1, activation="sigmoid"))
    model.compile(loss="binary_crossentropy", optimizer=optimizer, metrics=["accuracy"])
    model.fit(x_train, y_train, epochs=3, batch_size=8)
    y_hat = model.predict(x_test)
    print('Predictions \n', y_hat)
    
    y_hat = [0 if val < 0.5 else 1 for val in y_hat]
    print('Accuracy: ', accuracy_score(y_test, y_hat))
    model.save("tfmodel2.model")
    
    '''
    Predictions 
     [[0.]
     [1.]
     [0.]
     [1.]
     [1.]
     [1.]
     [0.]
     [1.]]
    Accuracy:  0.625
    '''
    
    

    您的 test 数据集有 8 个条目,这就是为什么您会看到 8 个预测,即 0 或 1。

    【讨论】:

    • 当我尝试你的代码时,我只得到预测的以下输出:[[0.507467] [0.507467] [0.507467] ... [0.507467] [0.507467] [0.507467]]
    • 是的,你的问题是关于如何进行预测,我向你展示了。事实仍然是您的模型需要优化,并且您应该使用更大的数据集。
    猜你喜欢
    • 2021-08-30
    • 2013-03-20
    • 2021-05-13
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多