首页 > 其他分享 >TensorFlow卷积神经网络识别10-monkey-species

TensorFlow卷积神经网络识别10-monkey-species

时间:2025-01-20 13:42:48浏览次数:1  
标签:acc 10 monkey keras loss tf TensorFlow model

  In [1]:

from tensorflow import keras
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
  In [2]:
# 文件下载地址  https://www.kaggle.com/datasets/slothkong/10-monkey-species
train_dir = './10-monkey-species/training/training'
valid_dir = './10-monkey-species/validation/validation'
label_file = './10-monkey-species/monkey_labels.txt'
  In [3]:
df = pd.read_csv(label_file, header=0)
df
 LabelLatin NameCommon NameTrain ImagesValidation Images
0 n0 alouatta_palliata\t mantled_howler 131 26
1 n1 erythrocebus_patas\t patas_monkey 139 28
2 n2 cacajao_calvus\t bald_uakari 137 27
3 n3 macaca_fuscata\t japanese_macaque 152 30
4 n4 cebuella_pygmea\t pygmy_marmoset 131 26
5 n5 cebus_capucinus\t white_headed_capuchin 141 28
6 n6 mico_argentatus\t silvery_marmoset 132 26
7 n7 saimiri_sciureus\t common_squirrel_monkey 142 28
8 n8 aotus_nigriceps\t black_headed_night_monkey 133 27
9 n9 trachypithecus_johnii nilgiri_langur 132 26
  In [17]:
# 图片数据生成器
height = 128
width = 128
channels = 3
batch_size =32
num_classes = 10
train_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale = 1. / 255,    # 归一化&浮点数
    rotation_range = 40,   # 随机旋转 0~40°之间
    width_shift_range = 0.2, # 随机水平移动
    height_shift_range = 0.2, # 随机垂直移动
    shear_range = 0.2, # 随机裁剪比例
    zoom_range = 0.2, # 随机缩放比例
    horizontal_flip = True,  # 随机水平翻转
    vertical_flip = True, # 随机垂直翻转
    fill_mode = 'nearest', # 填充模式
)
train_generator = train_datagen.flow_from_directory(train_dir, target_size=(height, width),
                                                    batch_size=batch_size, shuffle=True, class_mode='categorical')

valid_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale = 1. / 255,    # 归一化&浮点数
)
valid_generator = valid_datagen.flow_from_directory(valid_dir, target_size=(height, width),
                                                    batch_size=batch_size, shuffle=False, class_mode='categorical')
   
Found 1098 images belonging to 10 classes.
Found 272 images belonging to 10 classes.
  In [5]:
x, y = train_generator.next()   # 可以看出 y是经过one hot编码的
print(x.shape, y.shape)
   
(32, 128, 128, 3) (32, 10)
  In [6]:
model = tf.keras.models.Sequential()
# 卷积 # input_shape 输入参数为 (height, width, channels)
model.add(tf.keras.layers.Conv2D(filters = 32, kernel_size = 3, padding = 'same', activation = 'selu', input_shape = (height, width, 3)))
model.add(tf.keras.layers.Conv2D(filters = 32, kernel_size = 3, padding = 'same', activation = 'selu'))    # 卷积
model.add(tf.keras.layers.MaxPool2D())    # 池化
model.add(tf.keras.layers.Conv2D(filters = 64, kernel_size = 3, padding = 'same', activation = 'selu'))    # 卷积
model.add(tf.keras.layers.Conv2D(filters = 64, kernel_size = 3, padding = 'same', activation = 'selu'))    # 卷积
model.add(tf.keras.layers.MaxPool2D())    # 池化
model.add(tf.keras.layers.Conv2D(filters = 128, kernel_size = 3, padding = 'same', activation = 'selu'))   # 卷积
model.add(tf.keras.layers.Conv2D(filters = 128, kernel_size = 3, padding = 'same', activation = 'selu'))    # 卷积
model.add(tf.keras.layers.MaxPool2D())    # 池化
model.add(tf.keras.layers.Conv2D(filters = 256, kernel_size = 3, padding = 'same', activation = 'selu'))   # 卷积
model.add(tf.keras.layers.Conv2D(filters = 256, kernel_size = 3, padding = 'same', activation = 'selu'))    # 卷积
model.add(tf.keras.layers.MaxPool2D())    # 池化

# 输入输出shape: 具体而言,是将一个维度大于或等于3的高维矩阵,“压扁”为一个二维矩阵。即保留第一个维度(如:batch的个数),
# 然后将剩下维度的值相乘为“压扁”矩阵的第二个维度。如输入是(None, 32,32,3),则输出是(None, 3072)
model.add(tf.keras.layers.Flatten())   # Flatten层用来将输入“压平”,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
model.add(tf.keras.layers.Dense(2048, activation='selu'))
model.add(tf.keras.layers.AlphaDropout(0.3))
model.add(tf.keras.layers.Dense(1024, activation='selu'))
model.add(tf.keras.layers.AlphaDropout(0.25))
model.add(tf.keras.layers.Dense(512, activation='selu'))
model.add(tf.keras.layers.Dense(128, activation='selu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

# 配置网络
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
  In [7]:
# 训练
train_num = train_generator.samples
valid_num = valid_generator.samples
history = model.fit(train_generator, steps_per_epoch=train_num//batch_size, epochs=10,
                    validation_data=valid_generator, validation_steps=valid_num//batch_size)
   
Epoch 1/10
34/34 [==============================] - 42s 1s/step - loss: 18.0979 - acc: 0.1285 - val_loss: 4.8664 - val_acc: 0.1562
Epoch 2/10
34/34 [==============================] - 33s 957ms/step - loss: 2.6509 - acc: 0.1754 - val_loss: 2.7836 - val_acc: 0.2188
Epoch 3/10
34/34 [==============================] - 31s 921ms/step - loss: 2.2543 - acc: 0.2073 - val_loss: 3.4844 - val_acc: 0.1172
Epoch 4/10
34/34 [==============================] - 31s 900ms/step - loss: 2.0929 - acc: 0.2514 - val_loss: 2.6293 - val_acc: 0.2617
Epoch 5/10
34/34 [==============================] - 31s 917ms/step - loss: 2.0205 - acc: 0.2711 - val_loss: 2.4111 - val_acc: 0.2461
Epoch 6/10
34/34 [==============================] - 31s 919ms/step - loss: 1.9451 - acc: 0.3002 - val_loss: 2.5277 - val_acc: 0.2852
Epoch 7/10
34/34 [==============================] - 32s 924ms/step - loss: 1.8503 - acc: 0.3283 - val_loss: 2.5161 - val_acc: 0.3125
Epoch 8/10
34/34 [==============================] - 30s 882ms/step - loss: 1.8364 - acc: 0.3386 - val_loss: 2.5492 - val_acc: 0.2656
Epoch 9/10
34/34 [==============================] - 30s 867ms/step - loss: 1.7762 - acc: 0.3940 - val_loss: 1.8829 - val_acc: 0.3750
Epoch 10/10
34/34 [==============================] - 30s 873ms/step - loss: 1.7863 - acc: 0.3687 - val_loss: 2.1468 - val_acc: 0.3359
  In [16]:
pd.DataFrame(history.history).plot(figsize=(8, 5))
plt.grid()
plt.gca().set_ylim(0, 10)
plt.show()
    No description has been provided for this image   In [13]:
model.evaluate(valid_generator)   # 可以看出效果很差,还是需要用RestNet这样的复杂网络才可以
   
9/9 [==============================] - 3s 297ms/step - loss: 2.0539 - acc: 0.3640
Out[13]:
[2.053945541381836, 0.3639705777168274]

标签:acc,10,monkey,keras,loss,tf,TensorFlow,model
From: https://www.cnblogs.com/funsion/p/18681173

相关文章

  • 基于YOLOv5、YOLOv8和YOLOv10的电子产品零部件检测:深度学习应用与实现
    引言随着现代电子产品的普及和制造业的快速发展,产品质量控制变得尤为重要。传统的人工检测方法不仅效率低下,还容易受到人为因素的影响,导致检测结果不准确或不一致。深度学习技术,特别是目标检测技术的飞速发展,为电子产品零部件的自动化检测提供了新的解决方案。YOLO(YouOnly......
  • 基于YOLOv5、YOLOv8与YOLOv10的家居安防摄像头异常活动监测:深度学习实现与应用
    引言随着智能家居的普及,安防监控已经成为家庭安全不可或缺的一部分。尤其是利用深度学习模型进行异常活动的监测,可以有效提高家居安防系统的智能化程度,提前识别潜在的危险活动,保护居住者的安全。传统的家居安防系统往往依赖于简单的动作检测或定时拍摄,无法做到实时、精准的......
  • 基于YOLOv5、YOLOv8和YOLOv10的自助售货机商品检测:深度学习实践与应用
    引言自助售货机已经成为现代零售和自动化销售领域的重要组成部分。在自助售货机中,商品的检测与管理至关重要。通过精准的商品检测技术,售货机可以在商品售出后自动更新库存,并提供准确的商品信息反馈。然而,在复杂的环境下进行商品检测是一个具有挑战性的问题,尤其是在商品种类......
  • P1004 [NOIP2000 提高组] 方格取数
    链接https://www.luogu.com.cn/problem/P1004题目思路dp思路:如果是走一遍,很显然可以发现(i,j)的值只与(i-1,j)和(i,j-1)有关。于是递推:dp[i][j]=max(dp[i-1][j],dp[i][j-1])+mp[i][j]当走两遍:转换为四维dp:dp[i][j][k][l]。当(i==j&&k==l)时,减去mp[i][j]。代码#de......
  • 2110 加分二叉树
    描述设一个 n 个节点的二叉树 tree 的中序遍历为 (1,2,3,⋯,n),其中数字 1,2,3,⋯,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di​,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下:记 subtree......
  • 百兆/千兆/万兆(100Mbps/1000Mbps/10000Mbps)网络带宽的实际传输速率粗略计算 (转)
    首先关于网络带宽有两个值:理论带宽与实际带宽。实际带宽是由于实际的应用中,要再扣约12%的EthernetHeader,IPHeader,TCPHeader,ATMHeader等控制讯号,然后再排除网络损耗以及线路衰减等因素,所以实际带宽都达不到理论值百兆网(100Mbps):100Mbps理论传输速度是12.5MB/s,实际11MB/......
  • Windows10添加群晖磁盘映射,总是提示用户名密码不正确解决办法
    通过win+r键,输入\\NAS的IP地址,登录设备时总是提示”用户名或密码不正确”。但是实际密码是正确的。原因描述:Windows10(或更早版本)仅支持SMB1,这本身并不安全,可能会导致系统受到攻击。由于安全风险,SMB1默认为在SynologyNAS上禁用。所以导致无法通过密码验证,一直显示密码错误。解决......
  • 50个C++经典面试题(01~10)
    为什么要研究面试题,因为研究题目可以让面试者面试时看起来像个专家。本博文将给出50个面试题,题目涉及初级、中级、高级。下面来看下01~10题01:C++是什么?C++的优势是什么?C++是一门面向对象语言,它的存在的目的是为了克服C语言的短板。其中面向对象又涉及如下几个概念:polym......
  • TensorFlow卷积神经网络识别CiFar10物品分类
     In [1]:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimporttensorflowastffromsklearn.preprocessingimportStandardScaler In [2]:(x_train_all,y_train_all),(x_test,y_test)=tf.keras.datasets.ci......
  • 聊天也能写程序?10 分钟让 AI 帮你编写出文本格式转换的程序
    聊天也能写程序?10 分钟让 AI 帮你编写出文本格式转换的程序今天,我要和大家分享:只需跟AI聊聊天,10分钟就能搞定文本格式转换的程序!在 家长必看!1小时搞定RAZ英文绘本英文提取! 文章里提到,我通过AI实现语音转文字,但得到的文本格式只有一大段文字。我想要将这......