用keras搭建一个简单的一维卷积神经网络

用keras搭建一个简单的一维卷积神经网络编程环境:python3.6.8tensorflow1.12.3点击下载离线包matplotlib3.1.2numpy1.17.4数据集说明:我所采用的数据集,是我自己构建的一个网络流量数据集,借鉴了WeiWang等人端到端的思想,但是处理成的数据集却不同于他们的MNIST型数据集,而是采用的npy进行存储。由于只是用于测试模型搭建,该数据集仅包含了一部…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

编程环境:

python 3.6.8

tensorflow 1.12.3 点击下载离线包

matplotlib 3.1.2

numpy 1.17.4

数据集说明:

我所采用的数据集,是我自己构建的一个网络流量数据集,借鉴了Wei Wang等人端到端的思想,

但是处理成的数据集却不同于他们的MNIST型数据集,而是采用的npy进行存储。

由于只是用于测试模型搭建,该数据集仅包含了一部分数据(Chat流量),

原数据来源于加拿大网络安全研究所的公开数据集(ISCX2016)

直接上代码:

训练模型部分:

from tensorflow import keras
from tensorflow.python.keras.layers import Dense, Dropout, Activation, Flatten, Conv1D, MaxPool1D
import matplotlib.pyplot as plt
import numpy as np
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

# 数据集路径
dataset_path = 'dataset.npy'
# 接入softmax的全连接层维数
dense_num = 6
# 保存的模型文件路径
model_file = 'model/cnn_6traffic_model.h5'

# [training_images, training_labels,
# validation_images, validation_labels,
# testing_images, testing_labels]
data = np.load(dataset_path, allow_pickle=True)

x_train, y_train, x_test, y_test = np.array(data[0]), np.array(data[1]), np.array(data[2]), np.array(data[3])
print(x_train.shape, y_train.shape)

# 一维化
X_train = x_train.reshape(-1, 784, 1)
# print(X_train)
# X_train = X_train.astype('float32')
X_test = x_test.reshape(-1, 784, 1)
# X_test = X_test.astype('float32')


# 将像素值做归一化,也就是从0~255的取值压缩到0~1之间
# X_train /= 255
# X_test /= 255

# 构建模型
model = keras.models.Sequential()

# 卷积层1 + relu
# 25 卷积核的数量 即输出的维度
# 3 每个过滤器的长度
model.add(Conv1D(32, 3, activation='relu', input_shape=(784, 1), padding="same"))
# 池化层1
model.add(MaxPool1D(pool_size=3, strides=3))

# 卷积层2 + relu
model.add(Conv1D(64, 3, strides=1, activation='relu', padding='same'))
# 池化层2
model.add(MaxPool1D(pool_size=3, strides=3))

# 神经元随机失活
model.add(Dropout(0.25))
# 拉成一维数据
model.add(Flatten())
# 全连接层1
model.add(Dense(1024))
# 激活层
model.add(Activation('relu'))

# 随机失活
model.add(Dropout(0.4))
# 全连接层2
model.add(Dense(dense_num))
# Softmax评分
model.add(Activation('softmax'))

# 查看定义的模型
model.summary()

# 自定义优化器参数
# rmsprop = keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)

# lr表示学习速率
# decay是学习速率的衰减系数(每个epoch衰减一次)
# momentum表示动量项
# Nesterov的值是False或者True,表示使不使用Nesterov momentum
sgd = keras.optimizers.SGD(lr=0.01, decay=1e-4, momentum=0.9, nesterov=True)

model.compile(optimizer='sgd', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练
history = model.fit(X_train, y_train, epochs=10, batch_size=1000,
                    verbose=1, validation_data=[X_test, y_test])

model.save(model_file)
print(history.params)

 

注:神经网络初涉,有啥问题请直接指出,谢谢!有流量识别领域的小伙伴欢迎打扰!相互交流!

说明:鉴于很多人问我数据集的问题,但写这个文章时所用的仅有“Chat”的流量的数据集我已经删除了,所以我在这里提供了包含有我已处理好的六类网络流量的npy数据集,有需要的自取(下载地址),鉴于之前的数据集是二分类的,但我提供的数据集的六个标签,所以代码中需要做出相应修改,我已将修改后的代码附上了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190745.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月14日 下午8:22
下一篇 2026年2月14日 下午9:01


相关推荐

  • BAT机器学习面试1000题系列(第1~305题)

    BAT机器学习面试1000题系列整理:July、元超、立娜、德伟、贾茹、王剑、AntZ、孟莹等众人。本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者及来源链接。另,不少答案得到寒小阳、管博士、张雨石、王赟、褚博士等七月在线名师审校。说明:本系列作为国内首个AI题库,首发于七月在线实验室公众号上:julyedulab,并部分更新…

    2022年4月6日
    34
  • python中 global_python中round的用法

    python中 global_python中round的用法在Python中,一个变量的scope范围从小到大分成4部分:LocalScope(也可以看成是当前函数形成的scope),EnclosingScope(简单来说,就是外层函数形成的scope),GlobalScope(就是当前文件形成的scope),BuiltinsScope(简单来说,就是Python内置的变量位于最顶层的scope)。当Python开始查找一个非限定的变量名时(像ob…

    2025年8月26日
    6
  • 怎么花最少的钱提升出租屋的格调?

    怎么花最少的钱提升出租屋的格调?发条橘子667 ,一个脱离了高级趣味的人。可可苏玛 等 12288 人赞同@ 在我到上海一年零八个月的时候,我从原来的公司辞职了,之后我又双叒叕搬家了。新租的房子在漕河泾开发区附近,39平的一居室。是我能在这一带找到的最便宜的一居室。租赁合同上表明该公寓始建于1972年,因此整体的装修风格非常…怎么说呢…复古。基本上屋里每

    2022年6月23日
    24
  • C语言——折半查找法

    C语言——折半查找法C 语言 折半查找法折半查找法 顾名思义就是一种查找的方法 优点是其比较次数少 查找速度快 平均性能好 缺点是其要求的待查表必须是有序表 且插入删除比较困难 因此 折半查找法适用于不经常变动并且查找次数比较频繁的有序列表 例如 我买了一件衣服 告诉你在 300 元以内 让你用次数最少猜出这件衣服的价格 答 每次猜中间数代码展示 用最少次数猜 10 个数字中有没有 7intmain intarr 1 2 3 4 5 6 7 8 9 10 要求数组必须是有序的 intl

    2026年3月16日
    2
  • java8 stream().map().collect()的Collectors.toList()、Collectors.toMap()、Collectors.groupingBy()的用法[通俗易懂]

    java8 stream().map().collect()的Collectors.toList()、Collectors.toMap()、Collectors.groupingBy()的用法[通俗易懂]  现在有个集合:List<User>users=getUserList();  现在需要将这些user的id提取出来。这个很简单,for循环嘛,谁不会啊(不会吧不会吧,不会有人还不会用for循环的吧)。List<Long>idList=newArrayList<Long>();for(inti=0;i<users.size();i++){  idList.add(users.get(i).getId());}  

    2022年8月20日
    9
  • nrm错误

    nrm错误G vscode doc vue test gt nrmlsinterna validators js 120thrownewE INVALID ARG TYPE name string value TypeError ERR INVALID ARG TYPE The path argumentmust Receivedunde internal va

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号