1.使用顺序api建立神经网络
1.1 基本模型结构
使用的数据集是mnist数据集
fashion_mnist=keras.datasets.fashion_mnist
(X_train_full,y_train_full),(X_test,y_test)=fashion_mnist.load_data()
X_valid,X_train=X_train_full[:5000]/255.0,X_train_full[5000:]/255.0
y_valid,y_train=y_train_full[:5000],y_train_full[5000:]
1.1.1 逐层添加
import keras.models
from keras.layers import Dense
#先创建顺序模型
model=keras.models.Sequential()
#添加到模型中
model.add(keras.layers.Flatten(input_shape=[28,28]))
model=keras.models.Sequential()
print(model)
print(model.summary())
结果:
1.1.2 传递一个层列表
或者是直接在序列中传递一个列表
model=keras.models.Sequential([keras.layers.Flatten(input_shape=[28,28]),keras.layers.Dense(300,activation='relu')])
print(model)
print(model.summary())
1.2 查看层结构的常用方法
1.2.1 model.summary()
1.2.2 model.layers
可以获得层列表,按其索引获取层,也可以按名称获取
1.2.2.1 获得层的名字
h1=model.layers[1]
print(h1.name)
输出
dense
可以通过这种方式获得层名字
1.2.2.1 获得层的权重和bias
通过对指定层使用get_weights()
来获得相应的权重和bias
weight,bias=h1.get_weights()
print(weight)
权重矩阵的形状取决于输入的形状
1.2. 编译模型
model.compile(loss="sparse_categorical_crossentropy",optimizer='sgd',metrics=['accuracy'])
需要指定:
①损失函数
②优化器
1.3. 训练和评估模型
history=model.fit(X_train,y_train,epochs=30,validation_data=(X_valid,y_valid))
只用了两个层效果比较差
1.3.1 传递验证集
validation_data=(X_valid,y_valid)直接传递验证集
model.fit(X_train,y_train,epochs=30,validation_data=(X_valid,y_valid))
validation_split=0.1设置用于验证的训练集比例
model.fit(X_train,y_train,epochs=30,validation_split=0.1)
1.4 训练结果
1.4.1展示训练结果
pd.DataFrame(history.history).plot(figsize=(8,5))
plt.grid(True)
plt.gca().set_ylim(0,1)
plt.show()
1.4.2 调整
(1)首先检查学习率
(2)尝试使用优化器
(3)调整超参数
1.4.3 在测试集上评估误差
model.evaluate(X_test,y_test)
2.报错
2.1 AttributeError: module ‘keras.datasets’ has no attribute ‘fashion_mnist’
import keras.datasets
将上面的代码改为:
from tensorflow import keras
3. 函数式API
3.1 层结构
3.1.1 concatenate层
keras.layers.Concatenate()[(input(),hidden2]
使用列表传入合并的层