Keras BP神经网络


新手深度学习,Keras BP神经网络;MySQL数据源训练、测试集;模型保存到Redis、

from sklearn.metrics import r2_score
r2_score验证准确度
但是为负数,求大佬指教!谢谢

import keras
from keras.models import Sequential
from keras.layers import Dense, Flatten, Activation,Dropout
from keras.models import Model
from keras.callbacks import ModelCheckpoint,Callback
import numpy as np
import matplotlib.pyplot as plt 
from keras import initializers
from keras.optimizers import Adam
import pandas as pd
from sqlalchemy import create_engine
from numpy import arange
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()

# 初始化数据库连接,使用pymysql模块
# MySQL的用户:root, 密码:123456, 端口:3306,数据库:test
engine = create_engine('mysql+pymysql://root:123456@hadoop01:3306/nufront-nt')
# 查询语句,选出employee表中的所有数据
sql = ''' select * from mymlp_sport ; '''
# read_sql_query的两个参数: sql语句, 数据库连接
df = pd.read_sql_query(sql, engine)
# 输出employee表的查询结果

# pandas dataFrame转list
data = np.array(df.values.tolist())
# # print(data)
# guiyidata_1 = maxminnorm(data)
test_data = data[13:]
# # print("data", data)
# # print("guiyidata", guiyidata)
# # test_data = data[13:]
# x_test_data = test_data[:,0:8]
# guiyidata_2 = maxminnorm(data[:13])
# # print("testData", x_test_data)

# print(guiyidata_2)

################################
# 数据准备
###############################
train_data = data[:8]
valid_data = data[9:13]

x_train_data = sc.fit_transform(train_data[:, 0:8])
y_train_data = train_data[:, 8:9]
x_valid_data = sc.fit_transform(valid_data[:, 0:8])
y_valid_data = valid_data[:, 8:9]


print("x_train_data", x_train_data)
print("y_train_data", y_train_data)
print("x_valid_data", x_valid_data)
print("y_valid_data", y_valid_data)
# 归一化、、、

################################
# 创建模型
###############################
print(x_train_data.shape)

BATCH_SIZE = len(x_train_data)
EPOCHS = 200

model = Sequential()
# 输入层64个特征(具体需要再确认)、激活函数relu、维度784
model.add(Dense(8, input_shape=(8,),activation='relu', kernel_initializer='random_uniform',bias_initializer='random_uniform'))
#model.add(Dropout(0.5))
# # 一层隐含层,隐含层元素个数待定
model.add(Dense(units=10, activation='relu'))
#model.add(Dropout(0.2))
# # 输出层,暂定2个
model.add(Dense(units=1))
# 交叉熵损失函数、adam优化器、
model.compile(loss='mse', optimizer=Adam(lr=0.009))
# 模型结构
model.summary()

################################
# 模型训练
###############################
# remote = callbacks.RemoteMonitor(root='http://localhost:9000')
H = model.fit(x_train_data, y_train_data, batch_size=BATCH_SIZE,epochs=EPOCHS,validation_data=(x_valid_data, y_valid_data), shuffle=True, verbose=1)

# score = model.evaluate(samples, labels, batch_size=32, verbose=1)

# print('Test score:', score[0])
# print('Test accuracy:', score[1])


################################
# sklearn 准确率
###############################
from sklearn.metrics import r2_score
a = model.predict(x_valid_data)
pred_acc = r2_score(y_valid_data, a)
print('pred_acc',pred_acc)

N = np.arange(0, EPOCHS)
plt.style.use("ggplot")
plt.figure()

plt.plot(N, H.history["loss"], label="train_loss")
plt.plot(N, H.history["val_loss"], label="val_loss")
# plt.plot(N, H.history["mean_squared_error"], label="mean_squared_error")
# plt.plot(N, H.history["val_mean_squared_error"], label="val_mean_squared_error")

plt.title("Training Loss and Accuracy")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")

plt.legend()
#plt.savefig(args["plot"])

# ################################
# # 模型保存至Redis
# ###############################
# from redis import StrictRedis
# import pickle

# redis = StrictRedis(host='hadoop01', port=6379, db=1, password='123456')

# ################################
# # 多次训练已准确度作为考量、保存最优模型
# ###############################

# if not redis.get("sport_MLP_Net_acc"):
#     redis.set("sport_MLP_Net", model.to_json())
#     redis.set("sport_MLP_Net_weights",  pickle.dumps(model.get_weights(), protocol=pickle.HIGHEST_PROTOCOL)) 
#     redis.set("sport_MLP_Net_acc", np.float(pred_acc))
#     print("Redis模型初始化保存...")
# else:
#     if np.float(pred_acc) > float( redis.get("sport_MLP_Net_acc")):
#         redis.set("sport_MLP_Net", model.to_json())
#         redis.set("sport_MLP_Net_weights",  pickle.dumps(model.get_weights(), protocol=pickle.HIGHEST_PROTOCOL)) 
#         redis.set("sport_MLP_Net_acc", np.float(pred_acc))
#         print("Redis模型已替换更新...")
#     else:
#         print("本次训练Redis模型未更新")

[[  3.2    9.6    3.45   2.15 140.     2.8   11.     5.     2.24   2.24]
 [  3.2   10.3    3.75   2.2  120.     3.4   10.9   70.     2.33   2.33]
 [  3.2   10.3    3.65   2.2  150.     2.8   10.8   80.     2.32   2.32]
 [  3.2   10.1    3.5    2.    80.     1.5   11.3   50.     2.2    2.2 ]
 [  3.4   10.     3.4    2.15 130.     3.2   11.5   60.     2.27   2.27]
 [  3.2    9.6    3.55   2.1  130.     3.5   11.8   65.     2.2    2.2 ]
 [  3.     9.     3.5    2.1  100.     1.8   11.3   40.     2.26   2.26]
 [  3.2    9.6    3.55   2.1  130.     3.5   11.8   65.     2.2    2.2 ]
 [  3.2    9.2    3.5    2.1  140.     2.5   11.    50.     2.24   2.24]
 [  3.2    9.5    3.4    2.15 115.     2.8   11.9   50.     2.24   2.24]
 [  3.9    9.     3.1    2.    80.     2.2   13.    50.     2.2    2.2 ]
 [  3.1    9.5    3.6    2.1   90.     2.7   11.1   70.     2.2    2.2 ]
 [  3.2    9.7    3.45   2.15 130.     4.6   10.85  70.     2.35   2.35]
 [  3.     9.3    3.3    2.05 100.     2.8   11.2   50.      nan    nan]]  #预测数据
Epoch 196/200
8/8 [==============================] - 0s - loss: 1.1310e-08 - val_loss: 0.5095
Epoch 197/200
8/8 [==============================] - 0s - loss: 1.2138e-08 - val_loss: 0.5095
Epoch 198/200
8/8 [==============================] - 0s - loss: 1.1878e-08 - val_loss: 0.5095
Epoch 199/200
8/8 [==============================] - 0s - loss: 1.0396e-08 - val_loss: 0.5095
Epoch 200/200
8/8 [==============================] - 0s - loss: 8.0939e-09 - val_loss: 0.5095

pred_acc -134.18569109681408

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值