最近想做出一個不需要不斷重新訓練的模型,就是只需要把某些對應特征輸入,然後得到相應的結果,例如:
直接輸入到一個黑匣子內
該黑匣子至少有以下幾項功能:
所以第一階段需考證一下
先設定一個訓練集
並把數據完整放到包內進行學習(就直接抄官網代碼),代碼如下:
import tensorflow as tf
import numpy as np
import InputData
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing
x_train,y_train,x_test,y_test = InputData.TestData()
# x_train,y_train,x_test,y_test = InputData.TestBlankData()
print(len(y_test))
x_train=np.array(x_train).astype(np.float64)
y_train=np.array(y_train).astype(np.float64)
x_test=np.array(x_test).astype(np.float64)
y_test=np.array(y_test).astype(np.float64)
# x_train[np.isinf(x_train)]=0
# x_train[np.isnan(x_train)]=0
# x_test[np.isinf(x_test)]=0
# x_test[np.isnan(x_test)]=0
horsepower_normalizer = preprocessing.Normalization(axis=1)
horsepower_normalizer.adapt(x_train)
model = tf.keras.models.Sequential([
horsepower_normalizer,
tf.keras.layers.Dense(6, activation='relu'),
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(6, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(2, activation='softmax')
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(x_train, y_train[:,2], epochs=500)
model.evaluate(np.array(x_test), np.array(y_test)[:,2])
test_predictions = model.predict(x_test)
test_result=[0,0]
for intI in range(len(test_predictions)):
print(str(intI)+' : Pre - '+str(test_predictions[intI])+' , Act - '+str(y_test[intI][2]))
if((test_predictions[intI][0]>0.5 and y_test[intI][2] ==0) or (test_predictions[intI][1]>0.5 and y_test[intI][2] ==1) ):
test_result [0]+=1
else:
test_result [1]+=1
print('[正確,錯誤]')
print(test_result)
得出結果為:
對於測試集有 89% 正確
如下圖所示,把測試集的數據隨機插入空置
同樣運行代碼,得出結果為:
因為結果含有空置,所以模型直接收皮了
加入代碼:
x_train[np.isinf(x_train)]=0
x_train[np.isnan(x_train)]=0
x_test[np.isinf(x_test)]=0
x_test[np.isnan(x_test)]=0
結果比原本差了不少
我不知道為什麼,不過我覺得0不好看,我就替換成隨機數了,結果提升了
我就是嘗試一下而已,個人認為,單獨一個模型的調優以及設置其實並沒有太大的意義
只要知道機器學習的原理以及知道如何應用,調優可以交給專門其他人,甚至現在有很多人沉迷於此(但這些人只沉迷於准確率,卻沒想過業務變化的話,之前調整好的模型應該如何去適應)
但如何使用模型,把模型放到一個更有價值的地方去使用,把不同的模型整合,把模型跟業務實際的結合,反而是現在很多人沒有想過的方向
努力,腰痛啊