赞
踩
这次实验用的是keras官方下载的数据集,目的是把给出的数据分为十类,每个数据是一个二维数组,标签是一个0-10的数字。
下面是构建的神经网络
model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28, 28]))
model.add(keras.layers.Dense(300, activation = 'relu'))
model.add(keras.layers.Dense(100, activation = 'relu'))
model.add(keras.layers.Dense(10,activation = 'softmax'))
其中用到的relu激活函数对传入的每一个值大于零则返回本身,小于零则返回零,相当于y = max(0, x)。激活函数softmax输出值是在0-1之间且合为1的十个数,相当于一个概率分布,分别对应十个输出神经元。
定义损失函数与调整函数的参数
model.compile(loss = 'sparse_categorical_crossentropy',
optimizer = 'adam',metrics = ['accuracy'])
由于数据集给出的每个标签都是0-9的单个数字,所以定义损失函数用loss = 'sparse_categorical_crossentropy’将单个数字转化为独热编码形式,以便于与神经网络输出的十个值作对比,判断对错。当标签本来就是一个向量损失函数就用loss = ‘categorical_crossentropy’
最开始optimizer = ‘sgd’,但训练出来的准确率只有9%,后改为optimizer = ‘adam’,效果达到90%。因为sgd适合于比较平稳的的数据,其实也可以先把数据归一化再用sgd。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。