绘制散点图

  1. import numpy as np
  2. import keras
  3. import matplotlib.pyplot as plt
  4. from keras.models import Sequential
  5. from keras.layers import Dense
  6. x_data = np.random.rand(100)
  7. noise = np.random.normal(0,0.01,x_data.shape)
  8. y_data = x_data * 0.2 + 0.2 + noise
  9. # 显示为散点图
  10. plt.scatter(x_data,y_data)
  11. plt.show()

image.png

  1. # 构建顺序模型
  2. model = Sequential()
  3. # 添加输出1维 输入1维的连接层
  4. model.add(Dense(units=1,input_dim=1))
  5. # sgd 随机梯度下降优化方法 mse 均方误差
  6. model.compile(optimizer='sgd',loss='mse')
  7. # 训练500次 分批次 因为数据不是很大 干脆每批次寻来拿所有数据
  8. for i in tqdm(range(500)):
  9. # train_on_batch 返回
  10. cost = model.train_on_batch(x_data,y_data)
  11. w, b = model.layers[0].get_weights()
  12. print('W:',w)
  13. print('B:',b)
  14. print(cost)
  15. # 预测
  16. y_pred = model.predict(x_data)
  17. # 显示预测结果
  18. plt.scatter(x_data,y_data)
  19. plt.plot(x_data,y_pred,'r-',lw=3)
  20. plt.show()
  21. # 打印误差均值
  22. lost = y_pred-y_data
  23. lost = np.where(lost>=0,lost,-lost)
  24. print(np.mean(lost))
  1. 100%|███████████████████████████████████████████████████████████████████████████████████| 500/500 [00:00<00:00, 1316.41it/s]
  2. W: [[0.5304257]] # 准确值 0.2
  3. B: [0.02314443] # 准确值 0.2
  4. 0.008611408
  5. 0.13317464181891447

训练500次

可以看出拟合的不是很理想 考虑增加次数
image.png

训练3000次

image.png

  1. W: [[0.20160742]]
  2. B: [0.20000617]
  3. 0.00010633155
  4. 0.06449628744867321

完整代码 https://github.com/aboutmydreams/keras_study