TensorFlow2.0教程-迴歸
TensorFlow2。0教程-迴歸
最全Tensorflow 2.0 入門教程持續更新:
完整tensorflow2。0教程程式碼請看https://github。com/czy36mengfei/tensorflow2_tutorials_chinese (歡迎star)
本教程主要由tensorflow2.0官方教程的個人學習復現筆記整理而來,中文講解,方便喜歡閱讀中文教程的朋友,官方教程:
https://www。tensorflow。org
在迴歸問題中,我們的目標是預測連續值的輸出,如價格或機率。 我們採用了經典的Auto MPG資料集,並建立了一個模型來預測20世紀70年代末和80年代初汽車的燃油效率。 為此,我們將為該模型提供該時段內許多汽車的描述。 此描述包括以下屬性:氣缸,排量,馬力和重量。
1。Auto MPG資料集
獲取資料
dataset_path
=
keras
。
utils
。
get_file
(
‘auto-mpg。data’
,
‘https://archive。ics。uci。edu/ml/machine-learning-databases/auto-mpg/auto-mpg。data’
)
(
dataset_path
)
Downloading
data
from
https
:
//
archive
。
ics
。
uci
。
edu
/
ml
/
machine
-
learning
-
databases
/
auto
-
mpg
/
auto
-
mpg
。
data
32768
/
30286
[
================================
]
-
1
s
25
us
/
step
/
home
/
czy
/。
keras
/
datasets
/
auto
-
mpg
。
data
使用pandas讀取資料
column_names
=
[
‘MPG’
,
‘Cylinders’
,
‘Displacement’
,
‘Horsepower’
,
‘Weight’
,
‘Acceleration’
,
‘Model Year’
,
‘Origin’
]
raw_dataset
=
pd
。
read_csv
(
dataset_path
,
names
=
column_names
,
na_values
=
‘?’
,
comment
=
‘
\t
’
,
sep
=
‘ ’
,
skipinitialspace
=
True
)
dataset
=
raw_dataset
。
copy
()
dataset
。
tail
()
2。資料預處理
清洗資料
(
dataset
。
isna
()
。
sum
())
dataset
=
dataset
。
dropna
()
origin
=
dataset
。
pop
(
‘Origin’
)
dataset
[
‘USA’
]
=
(
origin
==
1
)
*
1。0
dataset
[
‘Europe’
]
=
(
origin
==
2
)
*
1。0
dataset
[
‘Japan’
]
=
(
origin
==
3
)
*
1。0
dataset
。
tail
()
MPG
0
Cylinders
0
Displacement
0
Horsepower
6
Weight
0
Acceleration
0
Model
Year
0
Origin
0
dtype
:
int64
劃分訓練集和測試集
train_dataset
=
dataset
。
sample
(
frac
=
0。8
,
random_state
=
0
)
test_dataset
=
dataset
。
drop
(
train_dataset
。
index
)
檢測資料
觀察訓練集中幾對列的聯合分佈。
sns
。
pairplot
(
train_dataset
[[
“MPG”
,
“Cylinders”
,
“Displacement”
,
“Weight”
]],
diag_kind
=
“kde”
)
<
seaborn
。
axisgrid
。
PairGrid
at
0x7f934072fe10
>
整體統計資料:
train_stats
=
train_dataset
。
describe
()
train_stats
。
pop
(
“MPG”
)
train_stats
=
train_stats
。
transpose
()
train_stats
取出標籤
train_labels
=
train_dataset
。
pop
(
‘MPG’
)
test_labels
=
test_dataset
。
pop
(
‘MPG’
)
標準化資料
最好使用不同比例和範圍的特徵進行標準化。 雖然模型可能在沒有特徵歸一化的情況下收斂,但它使訓練更加困難,並且它使得結果模型依賴於輸入中使用的單位的選擇。
def
norm
(
x
):
return
(
x
-
train_stats
[
‘mean’
])
/
train_stats
[
‘std’
]
normed_train_data
=
norm
(
train_dataset
)
normed_test_data
=
norm
(
test_dataset
)
3。構建模型
def
build_model
():
model
=
keras
。
Sequential
([
layers
。
Dense
(
64
,
activation
=
‘relu’
,
input_shape
=
[
len
(
train_dataset
。
keys
())]),
layers
。
Dense
(
64
,
activation
=
‘relu’
),
layers
。
Dense
(
1
)
])
optimizer
=
tf
。
keras
。
optimizers
。
RMSprop
(
0。001
)
model
。
compile
(
loss
=
‘mse’
,
optimizer
=
optimizer
,
metrics
=
[
‘mae’
,
‘mse’
])
return
model
model
=
build_model
()
model
。
summary
()
Model
:
“sequential”
_________________________________________________________________
Layer
(
type
)
Output
Shape
Param
#
=================================================================
dense
(
Dense
)
(
None
,
64
)
640
_________________________________________________________________
dense_1
(
Dense
)
(
None
,
64
)
4160
_________________________________________________________________
dense_2
(
Dense
)
(
None
,
1
)
65
=================================================================
Total
params
:
4
,
865
Trainable
params
:
4
,
865
Non
-
trainable
params
:
0
_________________________________________________________________
example_batch
=
normed_train_data
[:
10
]
example_result
=
model
。
predict
(
example_batch
)
example_result
array
([[
0。18062565
],
[
0。1714489
],
[
0。22555563
],
[
0。29366603
],
[
0。69764495
],
[
0。08851457
],
[
0。6851174
],
[
0。32245407
],
[
0。02959149
],
[
0。38945067
]],
dtype
=
float32
)
4。訓練模型
class
PrintDot
(
keras
。
callbacks
。
Callback
):
def
on_epoch_end
(
self
,
epoch
,
logs
):
if
epoch
%
100
==
0
:
(
‘’
)
(
‘。’
,
end
=
‘’
)
EPOCHS
=
1000
history
=
model
。
fit
(
normed_train_data
,
train_labels
,
epochs
=
EPOCHS
,
validation_split
=
0。2
,
verbose
=
0
,
callbacks
=
[
PrintDot
()])
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
……………………………………………………………………………………。。。。
檢視訓練記錄
hist
=
pd
。
DataFrame
(
history
。
history
)
hist
[
‘epoch’
]
=
history
。
epoch
hist
。
tail
()
loss mae mse val_loss val_mae val_mse epoch 995 2。191127 0。940755 2。191127 10。422818 2。594117 10。422818 995 996 2。113679 0。903680 2。113679 10。723925 2。631320 10。723926 996 997 2。517261 0。989557 2。517261 9。497868 2。379198 9。497869 997 998 2。250272 0。931618 2。250272 11。017041 2。658538 11。017041 998 999 1。976393 0。853547 1。976393 9。890977 2。491739 9。890977 999
def
plot_history
(
history
):
hist
=
pd
。
DataFrame
(
history
。
history
)
hist
[
‘epoch’
]
=
history
。
epoch
plt
。
figure
()
plt
。
xlabel
(
‘Epoch’
)
plt
。
ylabel
(
‘Mean Abs Error [MPG]’
)
plt
。
plot
(
hist
[
‘epoch’
],
hist
[
‘mae’
],
label
=
‘Train Error’
)
plt
。
plot
(
hist
[
‘epoch’
],
hist
[
‘val_mae’
],
label
=
‘Val Error’
)
plt
。
ylim
([
0
,
5
])
plt
。
legend
()
plt
。
figure
()
plt
。
xlabel
(
‘Epoch’
)
plt
。
ylabel
(
‘Mean Square Error [$MPG^2$]’
)
plt
。
plot
(
hist
[
‘epoch’
],
hist
[
‘mse’
],
label
=
‘Train Error’
)
plt
。
plot
(
hist
[
‘epoch’
],
hist
[
‘val_mse’
],
label
=
‘Val Error’
)
plt
。
ylim
([
0
,
20
])
plt
。
legend
()
plt
。
show
()
plot_history
(
history
)
使用early stop
model
=
build_model
()
early_stop
=
keras
。
callbacks
。
EarlyStopping
(
monitor
=
‘val_loss’
,
patience
=
10
)
history
=
model
。
fit
(
normed_train_data
,
train_labels
,
epochs
=
EPOCHS
,
validation_split
=
0。2
,
verbose
=
0
,
callbacks
=
[
early_stop
,
PrintDot
()])
plot_history
(
history
)
………………………………………………。。。。
測試
loss
,
mae
,
mse
=
model
。
evaluate
(
normed_test_data
,
test_labels
,
verbose
=
0
)
(
“Testing set Mean Abs Error: {:5。2f} MPG”
。
format
(
mae
))
Testing
set
Mean
Abs
Error
:
1。85
MPG
5。預測
test_predictions
=
model
。
predict
(
normed_test_data
)
。
flatten
()
plt
。
scatter
(
test_labels
,
test_predictions
)
plt
。
xlabel
(
‘True Values [MPG]’
)
plt
。
ylabel
(
‘Predictions [MPG]’
)
plt
。
axis
(
‘equal’
)
plt
。
axis
(
‘square’
)
plt
。
xlim
([
0
,
plt
。
xlim
()[
1
]])
plt
。
ylim
([
0
,
plt
。
ylim
()[
1
]])
_
=
plt
。
plot
([
-
100
,
100
],
[
-
100
,
100
])
error
=
test_predictions
-
test_labels
plt
。
hist
(
error
,
bins
=
25
)
plt
。
xlabel
(
“Prediction Error [MPG]”
)
_
=
plt
。
ylabel
(
“Count”
)
tensorflow 2。0 入門教程
TensorFlow 2。0 教程- Keras 快速入門
TensorFlow 2。0 教程-keras 函式api
TensorFlow 2。0 教程-使用keras訓練模型
TensorFlow 2。0 教程-用keras構建自己的網路層