人工智能--Keras网络构建

目录

一、学习目标

二、学习内容

三、学习过程

四、源码

五、学习产出


一、学习目标

  1. 掌握Keras构建网络的方法
  2. 理解不同的激活函数

二、学习内容

对cifar10数据库(10类),做如下实验:

  1. 构建合适的全连接网络结构进行分类,并定义一个自定义的全连接层加入到网络中。
  2. 选择使用不同的激活函数,比如relu、sigmoid、softmax,并对比结果。

三、学习过程

1.自定义的全连接层代码:

 2.使用自定义全连接层的对象,并使用不同的激活函数的效果:

激活函数使用relu

激活函数使用sigmoid

激活函数使用softmax

 激活函数使用softplus

激活函数使用softsign

 激活函数使用tanh

激活函数使用selu

激活函数使用elu

激活函数使用exponential


四、源码

#导入cifar10数据集
from tensorflow.keras.datasets import cifar10
from tensorflow.keras import utils
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train=utils.to_categorical(y_train,num_classes=10)
y_test=utils.to_categorical(y_test,num_classes=10)
x_train,x_test = x_train/255.0, x_test/255.0


# In[1]:
# 自定义层
import tensorflow as tf
from tensorflow.keras.layers import Layer

class SimpleDense(Layer):
  def __init__(self, units=32):
      super(SimpleDense, self).__init__()
      self.units = units

  def build(self, input_shape):  # 创建权重weights
      self.w = self.add_weight(shape=(input_shape[-1], self.units),
                               initializer='random_normal',
                               trainable=True)
      self.b = self.add_weight(shape=(self.units,),
                               initializer='random_normal',
                               trainable=True)

  def call(self, inputs):  # 定义从输入到输出的计算过程
      return tf.matmul(inputs, self.w) + self.b
  
    
# In[2]:
from tensorflow.keras import Sequential,Input,layers,optimizers
model = Sequential()
model.add(Input(shape=(32,32,3)))
model.add(layers.Reshape((32*32*3,)))

#model.add(layers.Dense(512,activation='relu'))
#用不同的激活函数
model.add(SimpleDense(512));
#改变中间层的激活函数
model.add(layers.Activation('relu'))
#model.add(layers.Activation('sigmoid'))
#model.add(layers.Activation('softmax'))
#model.add(layers.Activation('softplus'))
#model.add(layers.Activation('softsign'))
#model.add(layers.Activation('tanh'))
#model.add(layers.Activation('selu'))
#model.add(layers.Activation('elu'))
#model.add(layers.Activation('exponential'))
#model.add(layers.Activation('selu'))
model.add(layers.Dense(10,activation='softmax')) #最后一层的激活函数不变
#学习率改为0.005
optimizer = optimizers.SGD(lr=0.005)
model.compile(optimizer,loss='categorical_crossentropy',metrics=['accuracy'])


# In[3]:
#迭代8次
model.fit(x_train, y_train, batch_size=128, epochs=8)
print('\nTesting ------------------- ')
# model.load_weights('mymodel.h5')
loss, accuracy = model.evaluate(x_test, y_test)

源码下载


五、学习产出

  1. 测试出来的结果是使用relutanhselu这些激活函数的准确率最好,使用exponential激活函数的准确率最低;
  2. 总的来说,激活函数选择relu来测试的准确率较好。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值