Tensorflow keras 回歸模型

2021-10-02 12:13:19 字數 4091 閱讀 7606

import matplotlib as mpl

import matplotlib.pyplot as plt

# %matplotlib inline

import numpy as np

import sklearn

import pandas as pd

import os

import sys

import time

import tensorflow as tf

from tensorflow import keras

print

(tf.__version__)

print

(sys.version_info)

for module in mpl, np, pd, sklearn, tf, keras:

print

(module.__name__, module.__version__)

from sklearn.datasets import fetch_california_housing

## 資料收集

housing = fetch_california_housing(

)print

(housing.descr)

print

(housing.data.shape)

print

(housing.target.shape)

import pprint

pprint.pprint(housing.data[0:

5])pprint.pprint(housing.target[0:

5])from sklearn.model_selection import train_test_split

#分離測試集

x_train_all, x_test, y_train_all, y_test = train_test_split(

housing.data, housing.target,random_state=

7,test_size=

0.25

)#控制test_size控制測試集的比例,0.25==預設

# 分離訓練集驗證集

x_train, x_valid, y_train, y_valid = train_test_split(

x_train_all, y_train_all,random_state=11)

print

(x_valid.shape, y_valid.shape)

# 驗證集

print

(x_train.shape, y_train.shape)

# 訓練集

print

(x_test.shape, y_test.shape)

# 測試集

print

(np.

max(x_train)

, np.

min(x_train)

)# 列印訓練集中的極值

## 歸一化 x = (x - u(均值)) / std(方差) 就得到符合均值是0,方差是1的

# 正態分佈

from sklearn.preprocessing import standardscaler

scaler = standardscaler(

)#初始化物件

# 訓練集

#先轉成32,

#x_train: [none,28,28] -> [none,784] -> 再轉換回來reshape(-1, 28, 28)

#fit_transform:fit把訓練集的均值方差記錄下來給別的用(驗證集和測試集)

x_train_scaled = scaler.fit_transform(x_train)

# 驗證集 直接用transform

x_vaild_scaled = scaler.transform(x_valid)

# 測試集 直接用transform

x_test_scaled = scaler.transform(x_test)

# tf.keras.models.sequential()

"""model = keras.models.sequential()#建立物件

model.add(keras.layers.flatten(input_shape=[28,28]))#展平輸入

#把二維矩陣展成28*28的一維向量

model.add(keras.layers.dense(300,activation="relu"))

# 全鏈結層 activation 是啟用函式

model.add(keras.layers.dense(100,activation="relu"))

model.add(keras.layers.dense(10,activation="softmax"))

"""model = keras.models.sequential(

[ keras.layers.dense(

30, activation=

"relu"

, input_shape=x_train.shape[1:

]),#冒號後面應該是8

keras.layers.dense(1)

,#最後輸出只有乙個數,只有一層])

model.summary(

)model.

compile

(loss=

"mean_squared_error"

,#損失函式:均方差(平方和的均值)

optimizer=

"sgd"

,# 模型的求解方法,調整方法

)# relu: y = max(0,x)當x大於0時,輸出x,否則輸出0

# softmax: 將向量變成概率分布,x=[x1,x2,x3]

# y = [e^x1/sum, e^x2/sum, e^x3/sum ],

# sum = e^x1 + e^x2 + e^x3

# reson for sparse: y是個數 需要 one_hot成向量

# 如果y是乙個向量,直接用categorical_crossentropy

# model編譯

callbacks =

[ keras.callbacks.earlystopping(patience=

5, min_delta =1e-

3),#min_delta閾值:訓練間的差別,

# patience :連續多少次發生min_delta的情況要停止

# 比這個低的話,要停止

]# 開啟訓練

history = model.fit(x_train_scaled, y_train, epochs=

100,

# 訓練集遍歷10次

validation_data=

(x_vaild_scaled, y_valid)

,# 驗證集

callbacks=callbacks)

defplot_learning_curves

(history)

: pd.dataframe(history.history)

.plot(figsize=(8

,5))

# 把資料轉換成dataframe(一種資料結構) 圖的大小 (8 ,5)

plt.grid(

true

)# 顯示網格

plt.gca(

).set_ylim(0,

1)# 設定y座標軸的範圍

plt.show(

)plot_learning_curves(history)

# model.evaluate(x_test_scaled,y_test) # 測試集測試

與分類模型相比的變動:

1.損失函式變成

loss=

"mean_squared_error"

,#損失函式:均方差(平方和的均值

2.最後只有一層,因為結果只是個數

TensorFlow Keras 環境安裝

tensorflow keras深度學習人工智慧實踐 閱讀筆記 深度學習以大量矩陣模擬神經元的工作方式。矩陣運算特性 單一運算簡單,但是需要大量運算,適合平行計算。機器學習 1.訓練資料由features和label組成 2.機器學習兩個階段 訓練,3.分類 有監督的學習,無監督的學習,增強式學習。...

Tensorflow Keras 指定CPU執行

執行tensorflow 時候常出現oom out of memory 的錯誤,原因是batch size設定得太大導致視訊記憶體不足。如果想讓 僅僅執行在cpu下,可在原 中加入如下 import os os.environ cuda device order pci bus id os.envi...

tensorflow keras 環境搭建

略 keras是乙個前端深度學習庫,需要依賴於後端進行計算。tensorflow是keras的後端引擎 建立虛擬環境 可略過 新虛擬環境下安裝的好處 出現錯誤刪除環境重新開始即可。base環境下出現錯誤將會很麻煩。安裝好anaconda後執行開始選單下anaconda資料夾下的anaconda pr...