【神经网络】tensorflow -- 期中测试试题

news2024/11/27 0:35:28

题目一:(20分)

请使用Matplotlib中的折线图工具,绘制正弦和余弦函数图像,其中x的取值范围是,效果如图1所示。
要求:
(1)正弦图像是蓝色曲线,余弦图像是红色曲线,线条宽度为2.5;
(2)标题为:“正/余弦函数图像”,字体颜色为黑色,大小为16;
(3)横坐标标签为:“x轴”,纵坐标标签为“y轴”,字体大小为12。
在这里插入图片描述

		图1 正/余弦函数

① 代码

import matplotlib.pyplot as plt
import numpy as np

# 用于正常显示中文标签
plt.rcParams['font.sans-serif'] = 'SimHei'
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 获取x坐标
x = np.arange(-1 * np.pi,np.pi,0.1)
# 获取y坐标
y1=np.sin(x)

y2=np.cos(x)

plt.plot(x,y1,label='正弦',color='b',linewidth=2.5)

plt.plot(x,y2,label='余弦',color='r',linewidth=2.5)
# x,y轴的最小最大值
plt.xlim(-1*np.pi,np.pi)

plt.ylim(-1.5,1.5)
# 设置x,y轴的坐标刻度
plt.xticks([-np.pi,-np.pi/2,0,np.p/2,np.pi],
                        [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])

plt.yticks([-1,0,1])

plt.title('正/余弦函数图像',color='black',fontsize=16)

plt.xlabel('x轴',fontsize=12)

plt.ylabel('y轴',fontsize=12)

plt.legend()

plt.show()

② 实验结果
在这里插入图片描述

题目二:(40分)

请使用Windows中的“画图”工具,手写数字0-9,对图像进行适当的裁剪和处理后,保存为MNIST数据集的格式,具体步骤与要求如下:
步骤:
(1)使用Windows中的“画图”工具,手写数字0-9,并裁剪为适当尺寸的单个数字后,保存为图像文件,如图2所示;
(2)对裁剪过的图像进行反色、二值化处理,使图像呈现为黑底白字,如图3、4所示;
(3)对图像进行缩放,变换为2828像素的二值图像,如图5所示;
(4)将处理好的图像保存为与MNIST数据集相同的多维数组形式。

拓展要求:
在白纸上用黑色的笔写数字,拍照后,转换为MNIST数据集的格式。
提示:
(1)可以使用“全能扫描王”等工具优化所拍的图像,如图6所示;
(2)尝试用笔尖不同粗细的黑色笔写数字,看看什么情况下效果最好;
(3)在二值化之前先用高斯函数处理图像,看看效果有什么不同。
(高斯函数如表1所示。)

在这里插入图片描述
图2 图像裁剪
在这里插入图片描述

图3 反色处理
在这里插入图片描述

图4 图像二值化
在这里插入图片描述

图5 28×28像素图像
手写原图像 工具优化后的图像
在这里插入图片描述

图6 手写原图与工具优化后图像的对比图
① 主要函数及参数说明
def fomatPng(i) ,初始化图片函数,i为图片

② 代码

import numpy as np

import matplotlib.pyplot as plt

from PIL import Image

# 初始化图片
def fomatPng(i):
        # 打开图像,返回image对象
        img = Image.open("D:\\ui\haohaoxuexi\\神经网络\\me\\code\\image\\%d.png" % i)
        # 转换图像的色彩模式为二值图像
        img_gary = img.convert("1")
        # 将图像转换为数组
        arr_img_gary = np.array(img_gary)
        # 反色处理
        arr_img_fanzhi = np.invert(arr_img_gary)
        # 将数组转换为img
        img_fanzhi = Image.fromarray(arr_img_fanzhi)
        # 缩放图像为28*28
        img_small = img_fanzhi.resize((28, 28))
        plt.imshow(img_fanzhi)
        print(np.array(img_small))
        arr_img_small = np.array(img_small).reshape(1, 28, 28)
        return arr_img_small

train_x = fomatPng(0)
train_y = np.array((0, ))

for i in range(1, 10):
     # 数组拼接
     train_x = np.concatenate((train_x, fomatPng(i)))
     train_y = np.append(train_y, i)

print(train_x.shape)
print(train_y.shape)

for i in range(0,10):
    plt.subplot(2, 5, i + 1)
    plt.axis("off")
    plt.imshow(train_x[i],cmap="gray")
    plt.show()

③ 实验结果
在这里插入图片描述

④ 实验小结

题目三:(40分)
Fashion MNIST数据集中包含10种类别、共7万张不同商品的正面图像。在Keras中集成了Fashion MNIST数据集,被划分为训练集和测试集。
下载数据集,并完成以下要求:
要求:
(1)下载Fashion MNIST数据集,读取训练集和测试集数据,分别放在NumPy数组train_x、train_y、test_x、test_y中(train_x:训练集图像,train_y:训练集标签,test_x:测试集图像,test_y:测试集标签)
(2)编写代码段,查看训练集和测试集的样本数、形状,并查看数据集中的10类标签分别是什么。
(3)从训练集中选择前10张图像,对每张图像分别进行以下变换:转置、上下翻转、顺时针旋转10度、逆时针旋转10度、水平镜像,将图像数量由10张增加到60张,并将处理后的图像保存在多维数组train_x_aug1中。
(4)将train_x_aug1中的图像显示在10×6子图布局的画布中,其中第1列为原图,第2-6列为变换后的效果,每列图像的上方显示变换效果。全局标题为“Fashion Mnist数据增强”。字体颜色、字号、以及其他版式细节自定义,要求清晰、简洁、美观。
(5)要求(3)中,进行旋转操作时,如果要求旋转方向和角度随机,应该如何做?尝试对前10张图像完成以上变换,将结果保存在多维数组train_x_aug2中,并以清晰、美观的形式展示结果。
(6)要求(5)中,如果要求变换方式也随机选择,应该如何做?尝试对前100张图像,每张图像实现5种随机变换,并将结果保存在多维数组train_x_aug3中。随机选择其中的10张原图,把变换的结果展示出来。
拓展要求:
对图像进行缩放时,图像的像素会改变,要求对图像分别缩小10%、放大10%,缩放后图像尺寸仍保持2828,应该怎么做?
相关函数如表2所示:
表2 相关函数
序号 函数 函数功能 函数相关库
1 fashion_mnist=tf.keras.datasets.fashion_mnist 下载Fashion MNIST数据集 Keras库
2 对象名.rotate() 图像旋转度 PIL库
3 Image(类名).fromarray(obj)
将对象obj从Numpy数组格式转化为Image格式 PIL库Image类

4 对象名.tolist() 将数组或矩阵转化为列表 Numpy库
5 对象名.append(obj) 在数组或列表末尾追加新的对象obj Python内置函数
6 random(类名).choice(seq) 从指定序列seq中返回一个随机选择的元素。Seq可以是字符串,列表,元组或任何其他种类的序列 Random库

7 对象名.pad(array, pad_width, mode,constant_values ) 向array数组中以mode模式,按照pad_width指定的维度,填充constant_values指定的数值 Numpy库
① 主要函数及参数说明
1)展示图片函数:pics为图片数组,title为标题
def showPic(pics, titles):
2)显示标签函数:i为图片的下标
def get_fasion_mnist_labels(i):
3)随机变换函数:img为要变换的图片
def randomTran(img):
② 代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
def show(train_x, titles):
    plt.rcParams['font.sans-serif'] = "SimHei"   #字体设置
    plt.figure(figsize=(8, 15))   #画布大小设置
    index = 1
    for i in train_x:
        plt.subplot(10, 6, index)     #10行6列 第x个位置的图片
        plt.title(titles[index % 6 - 1], fontsize=6)     #取标签  取余的方式 循环输出每组图片
        plt.axis("off")     #关闭坐标轴
        plt.imshow(i)    #显示第几张图片
        index += 1
    plt.suptitle("Fashion Mnist 数据增强")
    plt.show()
def Choose_way(img):
    k = np.random.randint(0, 6, 1)    #创建一个只有0-5的随机数组 用于随机选择处理方式
    if k == 0:
        return np.array(img.transpose(Image.TRANSPOSE)).reshape(1, 28, 28)  # 转置
    if k == 1:
        return np.array(img.transpose(Image.FLIP_TOP_BOTTOM)).reshape(1, 28, 28)  # 上下翻转
    if k == 2:
        return np.array(img.rotate(-10)).reshape(1, 28, 28)  # 顺时针10度
    if k == 3:
        return np.array(img.rotate(10)).reshape(1, 28, 28)  # 逆时针10度
    if k == 4:
        return np.array(img.transpose(Image.FLIP_LEFT_RIGHT)).reshape(1, 28, 28)  # 水平镜像
    if k == 5:
        return np.array(img.transpose(Image.TRANSVERSE)).reshape(1, 28, 28)  # 上下翻转
def Show_message():
    print("训练集x的样本数:", len(train_x))
    print("训练集y的样本数:", len(train_y))
    print("测试集x的样本数:", len(test_x))
    print("测试集y的样本数:", len(test_y))
    print("训练集x的形状:", train_x.shape)
    print("训练集y的形状:", train_y.shape)
    print("测试集x的形状:", test_x.shape)
    print("测试集y的形状", test_y.shape)
def Show_label_train_y():
    class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag',
                   'Ankle boot']
    label_train_y = np.sort(train_y)  # 对数据集里面的值进行从小到大排序   无数个000 111 222 - 99999
    temp = -1
    for i in label_train_y:         #遍历  且防止输出重复的数字
        if i > temp:
            print("数据集中类标签有:",i+1, class_names[i])
            temp = i
def mode1():
    train_x_aug1 = train_x[0].reshape(1, 28, 28)
    for i in range(0, 10):
        img = Image.fromarray(train_x[i])
        # 第一幅图不处理,第二幅图处理
        if i != 0:
            train_x_aug1 = np.concatenate((train_x_aug1, train_x[i].reshape(1, 28, 28)))  # 将第一幅图片加入trainx_x_aug1
        train_x_aug1 = np.concatenate((train_x_aug1, np.array(img.transpose(Image.TRANSPOSE)).reshape(1, 28, 28)))  # 转置
        train_x_aug1 = np.concatenate((train_x_aug1, np.array(img.transpose(Image.FLIP_TOP_BOTTOM)).reshape(1, 28, 28)))  # 上下翻转
        train_x_aug1 = np.concatenate((train_x_aug1, np.array(img.rotate(-10)).reshape(1, 28, 28)))  # 顺时针10度
        train_x_aug1 = np.concatenate((train_x_aug1, np.array(img.rotate(10)).reshape(1, 28, 28)))  # 逆时针10度
        train_x_aug1 = np.concatenate((train_x_aug1, np.array(img.transpose(Image.FLIP_LEFT_RIGHT)).reshape(1, 28, 28)))  # 水平镜像
    titles = ['原图', '转置', '上下翻转', '顺时针旋转10度', '逆时针旋转10度', '水平镜像']
    show(train_x_aug1, titles)  # train_x_aug1 包含了60张图
    print(train_x_aug1)

def mode2():
    train_x_aug2 = train_x[0].reshape(1, 28, 28)
    for i in range(0, 10):  #依次处理10幅图  内部再对每幅图处理成6种状态
        k = np.random.randint(-180, 180, 5)  # 旋转角度随机数
        img = Image.fromarray(train_x[i])
        if i != 0:
            train_x_aug2 = np.concatenate((train_x_aug2, train_x[i].reshape(1, 28, 28)))
        for j in range(0,5):
            train_x_aug2 = np.concatenate((train_x_aug2, np.array(img.rotate(k[j])).reshape(1, 28, 28)))  #循环四次添加各种角度处理后的图片
    titles = ['原图', '随机1', '随机2', '随机3', '随机4', '随机5']
    show(train_x_aug2, titles)


def mode3():
    train_x_aug3 = train_x[0].reshape(1, 28, 28)
    for i in range(0, 100):
        img = Image.fromarray(train_x[i])  #取100张图片   每张图片随机5种处理方式
        if i != 0:
            train_x_aug3 = np.concatenate((train_x_aug3, Choose_way(img)))
        train_x_aug3 = np.concatenate((train_x_aug3, Choose_way(img)))
        train_x_aug3 = np.concatenate((train_x_aug3, Choose_way(img)))
        train_x_aug3 = np.concatenate((train_x_aug3, Choose_way(img)))
        train_x_aug3 = np.concatenate((train_x_aug3, Choose_way(img)))
        train_x_aug3 = np.concatenate((train_x_aug3, Choose_way(img)))

    r = np.random.randint(0, 100, 10)
    train_x_aug3_show = train_x_aug3[r[0]*6:r[0] * 6 + 6 ]
    for x in range(1, 10):  #在前6张图后面再加9次6张图
        train_x_aug3_show = np.concatenate((train_x_aug3_show, train_x_aug3[r[x] * 6:r[x] * 6 + 6]))
    titles = ['原图', '随机1', '随机2', '随机3', '随机4', '随机5']
    show(train_x_aug3_show, titles)
if __name__ == '__main__':
    fashion_mnist = tf.keras.datasets.fashion_mnist   #下载数据集
    (train_x, train_y), (test_x, test_y) = fashion_mnist.load_data()#train_x:训练集图像,train_y:训练集标签,test_x:测试集图像,test_y:测试集标签
    Show_message()   #  查看训练集和测试集的样本数、形状
    Show_label_train_y()  #查看数据集中的10类标签分别是什么  标签是放在train_y里面的
    #取从第一幅图开始的10张图进行处理
    mode1()
    mode2()
    mode3()

③ 实验结果
中间部分图省略
在这里插入图片描述

④ 实验小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷B2097 最长平台

最长平台 题目描述 对于一个数组,其连续的相同段叫做一个平台,例如,在 1 1 1, 2 2 2, 2 2 2, 3 3 3, 3 3 3, 3 3 3, 4 4 4, 5 5 5, 5 5 5&…

加密解密软件VMProtect入门使用教程(四):准备项目

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…

【2023 年第三届长三角高校数学建模竞赛】B 题 长三角新能源汽车发展与双碳关系研究 新能源汽车销售相关数据160M+下载

【2023 年第三届长三角高校数学建模竞赛】B 题 长三角新能源汽车发展与双碳关系研究 新能源汽车销售相关数据160M下载 1 题目 《节能与新能源汽车技术路线图 2.0》提出至 2035 年,新能源汽车市场占比超过 50%,燃料电池汽车保有量达到 100 万辆&#xff…

想做外贸却没有头绪?来看看这篇文章

海关总署公布最新数据:今年前4个月,我国外贸进出口总值13.32万亿元,同比增长5.8%,其中出口7.67万亿元,同比增长10.6%;进口5.65万亿元,同比增长0.02%。月度调查显示,出口订单增加的企…

图解LeetCode——238. 除自身以外数组的乘积

一、题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法,且在 O(n…

SoringBoot——pom文件:starter

先来看一看: 这次我们来介绍SpringBoot的pom文件的另一个好玩的地方:starter。 starter的中文含义是启动器,所以有时候我们在Maven仓库找依赖的时候,如果开启了自动翻译就会经常会看见一个奇怪的词叫做某某弹簧启动器&#xff0…

2023年河北沃克高位承重货架最新中标项目|中国沈阳某大型集团高位重型横梁式货架项目建设初期

【项目名称】高位重型横梁式货架项目 【承建单位】河北沃克金属制品有限公司 【合作客户】中国沈阳某大型集团 【建设时间】2023年5月上旬 【建设地域】中国沈阳地区 【项目客户需求】 本次沈阳高位重型横梁式货架项目合作的沈阳某大型集团中国变压器行业规模最大的制造企…

AIGC的发展与机遇

陈老老老板🦸 👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书)试一下文末赠书,讲一些科普类的知识 👨‍💻本文简述:本篇内容的引用都已征…

Protobuf: 高效数据传输的秘密武器

当涉及到网络通信和数据存储时,数据序列化一直都是一个重要的话题;特别是现在很多公司都在推行微服务,数据序列化更是重中之重,通常会选择使用 JSON 作为数据交换格式,且 JSON 已经成为业界的主流。但是 Google 这么大…

《理解了实现再谈网络性能》读书笔记

文章目录 内核是如何接收网络包的1.1 Linux⽹络收包总览1.2 linux 启动创建ksoftirqd进程网络子系统初始化协议栈注册网卡驱动初始化启动网卡 1.3 迎接数据的到来硬中断处理ksoftirqd 内核线程处理软中断网络协议栈处理IP协议层处理 完整流程 内核是如何接收网络包的 1.1 Linu…

使用阿里云服务器建站WordPress博客网站上线全流程

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程: …

常见概率分布及图像

概率分布 文章目录 概率分布[toc]1 离散概率分布1.1 伯努利分布1.2 二项分布1.3 泊松分布 2 连续概率分布2.1 均匀分布2.2 指数分布2.3 正态分布2.4 卡方分布2.5 Student分布3.5 F分布 1 离散概率分布 1.1 伯努利分布 随机变量 X X X仅取两个值, X 0 , 1 X0,1 X0…

【2023 年第三届长三角高校数学建模竞赛】C 题 考研难度知多少 考研情况相关数据下载

【2023 年第三届长三角高校数学建模竞赛】C 题 考研难度知多少 1 题目 C 题 考研难度知多少 据相关媒体报道,2023 年考研可以称得上是“最难”的一年,全国研究生报考人数突破新高达到 474 万人、部分考研学生感染新冠带病赴考、保研名额增多 挤压考研…

依次判断数组a1中的每个元素是否小于数组a2中对应位置的每个元素numpy.less()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 依次判断数组a1中的每个元素 是否小于数组a2中对应位置的每个元素 numpy.less() 选择题 以下程序的运行结果是? import numpy as np a1np.array([1,2,3]) a2np.array([3,2,1]) print("【…

消息推送平台的实时数仓?flink消费kafka消息入到hive

上一次比较大的更新是做了austin的预览地址,把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了,austin常规的功能已经更新得差不多了,剩下的就是各种细节的完善。 不知道大家还记不记得我当时规划austin时&…

免费使用的在线Axure原型工具找到了!

在线 Axure 工具替代即时设计,不需要安装插件,直接在浏览器中打开 Axure 原型文件,操作更加便捷。除了支持 Axure,即时设计还兼容 Figma、Sketch、AdobeXD 等更多文件类型,可用于线框设计、UI/UX 设计、原型交互、免切…

linux内核:笔记3-网络数据包收发流程

1.网络分层中,内核协议栈负责实现网络层和传输层 2.内核对用户进程提供socket接口用以调用 3.Linux内核包含链路层驱动用来驱动网络设备 4.内核网络层用来实现IP、ICMP以及IGMP 5.内核层传输层用来实现TCP和udp协议 6.内核源码中网络设备驱动对应的代码位于dri…

KDZD-100A触摸屏回路电阻测试仪

一、简介 测试仪是根据电力执行标准DL/T845.4-2004,采用高频开关电源技术和数字电路技术相结合设计而成。它适用于开关控制设备回路电阻的测量。其测试电流采用国家标准推荐的直流100A。可在电流100A的情况下直接测得回路电阻,并用数字显示出来。测量准确…

劝你们不要去外包,两年外包生涯做完,感觉自己废了一半....

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近5年的点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的功能测试…

​TPAMI 2023 | 无监督域适应语义分割新视角:统一图像和特征层次的对齐

©PaperWeekly 原创 作者 | 陈超奇 单位 | 香港大学 研究方向 | 迁移学习 论文标题: I2F: A Unified Image-to-Feature Approach for Domain Adaptive Semantic Segmentation 论文链接: https://arxiv.org/abs/2301.01149(预印版&#x…