tensorflow多層感知器例項筆記
阿新 • • 發佈:2021-10-31
import tensorflow as tf
import pandas as pd
import numpy as py
import matplotlib.pyplot as plt
%matplotlib inline
data = pd.read_csv("C:\\Users\\94823\\Desktop\\tensorflow學習需要的資料集\\advertise.csv")
data
TV | radio | newspaper | sales | |
---|---|---|---|---|
1 | 230.1 | 37.8 | 69.2 | 22.1 |
2 | 44.5 | 39.3 | 45.1 | 10.4 |
3 | 17.2 | 45.9 | 69.3 | 9.3 |
4 | 151.5 | 41.3 | 58.5 | 18.5 |
5 | 180.8 | 10.8 | 58.4 | 12.9 |
... | ... | ... | ... | ... |
196 | 38.2 | 3.7 | 13.8 | 7.6 |
197 | 94.2 | 4.9 | 8.1 | 9.7 |
198 | 177.0 | 9.3 | 6.4 | 12.8 |
199 | 283.6 | 42.0 | 66.2 | 25.5 |
200 | 232.1 | 8.6 | 8.7 | 13.4 |
200 rows × 4 columns
data.head()
TV | radio | newspaper | sales | |
---|---|---|---|---|
1 | 230.1 | 37.8 | 69.2 | 22.1 |
2 | 44.5 | 39.3 | 45.1 | 10.4 |
3 | 17.2 | 45.9 | 69.3 | 9.3 |
4 | 151.5 | 41.3 | 58.5 | 18.5 |
5 | 180.8 | 10.8 | 58.4 | 12.9 |
plt.scatter(data.TV,data.sales)
<matplotlib.collections.PathCollection at 0x2a67f0e33d0>
plt.scatter(data.radio,data.sales)
<matplotlib.collections.PathCollection at 0x2a67f1e6520>
plt.scatter(data.newspaper,data.sales)
<matplotlib.collections.PathCollection at 0x2a67f337ca0>
x = data.iloc[:, 0:-1] # 取所有行,以及除去最後一列的資料
x
TV | radio | newspaper | |
---|---|---|---|
1 | 230.1 | 37.8 | 69.2 |
2 | 44.5 | 39.3 | 45.1 |
3 | 17.2 | 45.9 | 69.3 |
4 | 151.5 | 41.3 | 58.5 |
5 | 180.8 | 10.8 | 58.4 |
... | ... | ... | ... |
196 | 38.2 | 3.7 | 13.8 |
197 | 94.2 | 4.9 | 8.1 |
198 | 177.0 | 9.3 | 6.4 |
199 | 283.6 | 42.0 | 66.2 |
200 | 232.1 | 8.6 | 8.7 |
200 rows × 3 columns
y = data.iloc[:,-1] # 取所有行以及最後一列的資料
y
1 22.1
2 10.4
3 9.3
4 18.5
5 12.9
...
196 7.6
197 9.7
198 12.8
199 25.5
200 13.4
Name: sales, Length: 200, dtype: float64
model = tf.keras.Sequential(
# 列表形式[],幾個列表元素就是有多少個感知器
# 10表示輸出的單元的個數,3表示輸入的三個維度,activation就是中間層的啟用,
# 1表示第二層輸出的單元個數,因為第二層就是最後的輸出層,所以就是輸出的結果是一個
[tf.keras.layers.Dense(10,input_shape=(3,),activation='relu'),
tf.keras.layers.Dense(1)
]
)
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 10) 40
_________________________________________________________________
dense_1 (Dense) (None, 1) 11
=================================================================
Total params: 51
Trainable params: 51
Non-trainable params: 0
_________________________________________________________________
- 第一行的param中為40是因為有三個輸入再加一個偏置b也就是\(w_i1x_1+w_i2x_2+w_i3x_3+bi=y_i\)
- 第二行有11個引數是因為十個輸入再加上一個偏置!
# 訓練模型
model.compile(
optimizer='adam',# adam是常用的優化方法
loss='mse'
)
model.fit(x,y,epochs=100)
Epoch 91/100
7/7 [==============================] - 0s 833us/step - loss: 3.6655
Epoch 92/100
7/7 [==============================] - 0s 834us/step - loss: 3.6252
Epoch 93/100
7/7 [==============================] - 0s 1000us/step - loss: 3.5899
Epoch 94/100
7/7 [==============================] - 0s 833us/step - loss: 3.5679
Epoch 95/100
7/7 [==============================] - 0s 1ms/step - loss: 3.5273
Epoch 96/100
7/7 [==============================] - 0s 833us/step - loss: 3.5049
Epoch 97/100
7/7 [==============================] - 0s 834us/step - loss: 3.4880
Epoch 98/100
7/7 [==============================] - 0s 1000us/step - loss: 3.4627
Epoch 99/100
7/7 [==============================] - 0s 667us/step - loss: 3.4396
Epoch 100/100
7/7 [==============================] - 0s 1ms/step - loss: 3.4226
<keras.callbacks.History at 0x2a67fc77ee0>
test = data.iloc[:10,0:-1] # 對前十個資料進行預測
model.predict(test)
array([[22.26979 ],
[14.242942 ],
[ 8.892993 ],
[18.704414 ],
[13.689433 ],
[ 6.2554317],
[11.340095 ],
[10.898435 ],
[ 1.2222604],
[11.607856 ]], dtype=float32)
data.iloc[:10,-1]
1 22.1
2 10.4
3 9.3
4 18.5
5 12.9
6 7.2
7 11.8
8 13.2
9 4.8
10 10.6
Name: sales, dtype: float64