参考资料:
深度学习:Keras入门(一)之基础篇
1 Keras基础
1.1 Keras的模块结构
2 案例
2.1 Dense()层参数
units:正整数,输出空间维度,有几个神经元
input_shape:即张量的形状
input_dim:代表张量的维度
input_length:代表序列长度,可以理解成有多少个样本
[[1],[2],[3]] 这个张量的shape为(3,1),input_dim为2
[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]]这个张量的shape为(3,2,2),input_dim为2
[1,2,3,4]这个张量的shape为(4,),input_dim为1
2.2 鸢尾花的分类案例
from tensorflow.keras.layers import *
from sklearn.datasets import load_iris
#导入数据
iris = load_iris()
data = iris.data
target= iris.target
train_x,test_x,train_y,test_y=train_test_split(data,target,test_size=0.25)
'''
train_x.shape:(122,4)
train_y:(122,)
这里需要把train_y和test_y转化成one-hot一下,
因为神经网络softmax输出的shape是(None,3),而y的shape是(None,1),
此时会报错:
ValueError: `logits` and `labels`
must have the same shape, received ((None, 3) vs (None, 1)).
'''
train_y = (np.arange(3)==train_y[:,None]).astype(int) #3是因为这是一个三分类问题
test_y = (np.arange(3)==test_y[:,None]).astype(int)
#step1:选择模型
model = tf.keras.Sequential()
#step2:构建网络
model.add(Dense(16,input_shape=(4,),activation='relu'))
model.add(Dense(8,activation='relu'))
model.add(Dense(3,activation='softmax'))
#step3:编译
model.compile(loss='categorical_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
#step4:训练
b_size = 10
max_epochs = 100
print("Starting training ")
h = model.fit(train_x,train_y,batch_size=b_size, epochs=max_epochs)
print("Training finished \n")
如果遇到ValueError: logits
and labels
,must have the same shape, received ((None, 3) vs (None, 1))。
要么就是把input的shape从(None, 1)改成(None, 3);要么把神经网络output的shape从(None, 3)改成(None, 1),如可以用argmax取出最大值。