Sequential模型

1 Keras模型

  • Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model)。
  • Model更广泛,Sequential是Model的一种特殊情况。

1.1 序贯模型

  • 单输入输出,一条路到底。层与层之间只有香菱关系,没有跨层连接。
  • 特点:编译速度快,操作简单
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
from keras.datasets import mnist
import numpy

'''
    第一步:选择模型
'''
model = Sequential()
'''
   第二步:构建网络层
'''
model.add(Dense(500, input_shape=(784,)))  # 输入层,28*28=784
model.add(Activation('tanh'))  # 激活函数是tanh
model.add(Dropout(0.5))  # 采用50%的dropout

model.add(Dense(500))  # 隐藏层节点500个
model.add(Activation('tanh'))
model.add(Dropout(0.5))

model.add(Dense(10))  # 输出结果是10个类别,所以维度是10
model.add(Activation('softmax'))  # 最后一层用softmax作为激活函数

'''
   第三步:编译
'''
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)  # 优化函数,设定学习率(lr)等参数
model.compile(loss='categorical_crossentropy', optimizer=sgd, class_mode='categorical')  # 使用交叉熵作为loss函数

'''
   第四步:训练
   .fit的一些参数
   batch_size:对总的样本数进行分组,每组包含的样本数量
   epochs :训练次数
   shuffle:是否把数据随机打乱之后再进行训练
   validation_split:拿出百分之多少用来做交叉验证
   verbose:屏显模式 0:不输出  1:输出进度  2:输出每次的训练结果
'''
(X_train, y_train), (X_test, y_test) = mnist.load_data()  # 使用Keras自带的mnist工具读取数据(第一次需要联网)
# 由于mist的输入数据维度是(num, 28, 28),这里需要把后面的维度直接拼起来变成784维
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1] * X_train.shape[2])
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1] * X_test.shape[2])
Y_train = (numpy.arange(10) == y_train[:, None]).astype(int)
Y_test = (numpy.arange(10) == y_test[:, None]).astype(int)

model.fit(X_train, Y_train, batch_size=200, epochs=50, shuffle=True, verbose=0, validation_split=0.3)
model.evaluate(X_test, Y_test, batch_size=200, verbose=0)

'''
    第五步:输出
'''
print("test set")
scores = model.evaluate(X_test, Y_test, batch_size=200, verbose=0)
print("")
print("The test loss is %f" % scores)
result = model.predict(X_test, batch_size=200, verbose=0)

result_max = numpy.argmax(result, axis=1)
test_max = numpy.argmax(Y_test, axis=1)

result_bool = numpy.equal(result_max, test_max)
true_num = numpy.sum(result_bool)
print("")
print("The accuracy of the model is %f" % (true_num / len(result_bool)))

1.2 函数式模型

  • 多输入输出,层与层之间任意连接
  • 特点:编译速度慢

2 在pytorch中Sequential()的使用

2.1 按照常规方法来构建网络

  • 经过我的逆推,根据全连接层linear1从1024映射到64,猜出输入图片的像素是32×32
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.conv1 = nn.Conv2d(3, 32, 5, padding=2)
        self.maxpool1 = nn.MaxPool2d(2)
        self.conv2 = nn.Conv2d(32, 32, 5, padding=2)
        self.maxpool2 = nn.MaxPool2d(2)
        self.conv3 = nn.Conv2d (32, 64, 5,padding=2)
        self.maxpool3 = nn.MaxPool2d(2)
        self.flatten = nn.Flatten() #展开
        self.linear1 = nn.Linear(1024, 64)
        self.linear2 = nn.Linear(64, 10)
        
    def forward(self,x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x
 
net = Net()
print(net)

2.2 使用Sequential()构建网络

  • 使用Sequential()构建使更加简单,forward函数也更加简洁。
#sequential的使用
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.model = nn.Sequential(
            nn.Conv2d(3, 32, 5, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 32, 5, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d (32, 64, 5,padding=2),
            nn.MaxPool2d(2),
            nn.Flatten(),
            nn.Linear(1024, 64),
            nn.Linear(64, 10),
        )
    
    def forward(self,x):
        x = self.model(x)
        return x      
 
net = Net()
print(net)
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sequential是Keras中的一种神经网络框架,它是一个容器,用于封装神经网络的结构。Sequential模型只有一组输入和一组输出,各层按照先后顺序进行堆叠,前一层的输出作为后一层的输入。通过堆叠不同的层,可以构建出神经网络。\[1\]在搭建神经网络时,使用Sequential是非常重要的。通过实践和编写代码,可以更好地理解神经网络的原理和使用方法。\[2\]在使用fit方法时,需要注意validation_split参数用于划分数据集,shuffle参数用于确定是否打乱数据。如果原始数据集本身是有序的,应该在第一轮训练之前先打乱顺序。\[3\] #### 引用[.reference_title] - *1* *3* [多层神经网络 —— Sequential模型](https://blog.csdn.net/xuechanba/article/details/124952150)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [搭建小实战和sequential的使用](https://blog.csdn.net/weixin_69398563/article/details/126360789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值