# 搭建屬於你的第一個Neural Network
###### tags: `Object Detection` `Python`
## 1 Input Data
|CSV|XLS|
|--|--|
|plain text format|binary file format|
5,6,3,12|Excel Sheets|
## 2 Build Data
```python
np.random.normal(mean,標準差,quantity)
```
## 3 save numpy array as csv file
```python=
import numpy as np
import pandas as pd
from pandas import*
x=np.random.normal(100,70,1000)
y=np.random.normal(80,50,1000)
data=pd.DataFrame({"x":x,"y":y})
data.to_csv("First_Try.csv",sep=',',index=False)
```
## 4 Get and Split data
a) array
```python=
Data=pd.read_csv("First_Try.csv")
x=Data['x']
y=Data['y']
Xtrain=x[:800]
Xtest=x[800:]
Ytrain=y[:800]
Ytest=y[800:]
```
b) Numpy array
```python=
n=len(data['x'])
Xtrain=np.array([[data['x'][i],data['y'][i]] for i in range(n)])
Ytrain=np.array(data['class'])
```
## 5 Build Neural Network Model
```python=
model=Sequential()
model.add(Dense(25,input_shape=(2,),activation='sigmoid'))
model.add(Dense(21,activation='relu'))
model.add(Dense(12,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
model.summary()
model.compile(loss='binary_crossentropy',optimizer=SGD(0.9),metrics=['accuracy'])
model.fit(Xtrain,Ytrain,batch_size=200,epochs=10,verbose=1)
score = model.evaluate(Xtrain, Ytrain, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
```
## Note
1. 一樣的NN每次估計的acc不一樣(隨機性)
Ex:
初始化: weight
正則化: dropout
層: 詞嵌入
最優化: stochastic optimizing
2. 有時候acc 高到92%不要太高興,好的NN經得起多次驗證
3. sigmoid + relu(適合中間層) + sigmoid 是可行的
4. 設data=1000 batch_size=200,epochs=10,則會在一個epoch隨機丟入並處理5次資料
5. Solution for overfitting and underfitting (acc↓):
增加資料量
在正確的epoch停止 => dropout layer
Reduce layer
Change optimizer: sigmoid=>自主改變梯度的Adam(RMSprop + momentum)
L1/L2 Regularization
6. 一維Gaussian Distribution資料不適合用NN分析處理 => 直接lineral regression
7. evaluate要跑的是training data
8. Logistics Regression 最適合用Softmax+Sigmoid