基於keras的神經網路回歸模型
import matplotlib.pyplot as plt
from math import sqrt
from matplotlib import pyplot
import pandas as pd
from numpy import concatenate
from sklearn.preprocessing import minmaxscaler
from sklearn.metrics import mean_squared_error
from keras.models import sequential
from keras.layers.core import dense, dropout, activation
from keras.optimizers import adam
'''keras實現神經網路回歸模型
'''# 讀取資料
path = 'data.csv'
train_df = pd.read_csv(path)
# 刪掉不用字串字段
dataset = train_df.drop('jh',axis=1)
# df轉array
values = dataset.values
# 原始資料標準化,為了加速收斂
scaler = minmaxscaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
y = scaled[:, -1]
x = scaled[:, 0:-1]
# 隨機拆分訓練集與測試集
from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.25)
# 全連線神經網路
model = sequential()
input = x.shape[1]
# 隱藏層128
model.add(dense(128, input_shape=(input,)))
model.add(activation('relu'))
# dropout層用於防止過擬合
#model.add(dropout(0.2))
# 隱藏層128
model.add(dense(128))
model.add(activation('relu'))
#model.add(dropout(0.2))
# 沒有啟用函式用於輸出層,因為這是乙個回歸問題,我們希望直接**數值,而不需要採用啟用函式進行變換。
model.add(dense(1))
# 使用高效的 adam 優化演算法以及優化的最小均方誤差損失函式
model.compile(loss='mean_squared_error', optimizer=adam())
# early stoppping
from keras.callbacks import earlystopping
early_stopping = earlystopping(monitor='val_loss', patience=50, verbose=2)
# 訓練
history = model.fit(train_x, train_y, epochs=300, batch_size=20, validation_data=(test_x, test_y), verbose=2, shuffle=false, callbacks=[early_stopping])
# loss曲線
pyplot.plot(history.history['loss'], label='train')
pyplot.plot(history.history['val_loss'], label='test')
pyplot.legend()
pyplot.show()
# **
yhat = model.predict(test_x)
# **y逆標準化
inv_yhat0 = concatenate((test_x, yhat), axis=1)
inv_yhat1 = scaler.inverse_transform(inv_yhat0)
inv_yhat = inv_yhat1[:,-1]
# 原始y逆標準化
test_y = test_y.reshape((len(test_y), 1))
inv_y0 = concatenate((test_x,test_y), axis=1)
inv_y1 = scaler.inverse_transform(inv_y0)
inv_y = inv_y1[:,-1]
# 計算 rmse
rmse = sqrt(mean_squared_error(inv_y, inv_yhat))
print('test rmse: %.3f' % rmse)
plt.plot(inv_y)
plt.plot(inv_yhat)
plt.show()
keras評估模型
當建立好模型並且用來訓練之後,如何評估模型的好壞,準確度又如何呢?三種常用方法 1 使用自動驗證方法 在 fit 函式中增加乙個validation split引數,該引數用來進行驗證效果 該引數可以自由設定,一般設定為20 或者30 也就是測試集佔總資料集的20 或者30 的資料用來進行驗證,其餘...
keras載入模型
說明 該程式是乙個包含兩個隱藏層的神經網路。演示如何載入乙個儲存好的模型。資料集 mnist from future import print function python提供了 future 模組,把下乙個新版本的特性匯入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性。import ...
keras評估模型
目錄 keras評估模型 自動評估 手動評估 手動分離資料集 利用交叉驗證 usr bin env python coding utf 8 author jia shilin 通過fit 函式分割引數,設定資料集百分比,from keras.models import sequential from...