基于TensorFlow的CNN卷积网络模型花卉分类(1)

2023-10-27

一、项目描述

使用TensorFlow进行卷积神经网络实现花卉分类的项目,加载十种花分类,建立模型后进行预测分类图片
环境:win10 +TensorFlow gpu 1.12.0+pycharm
训练集
训练数据存放路径为:‘D:/LearnMSA/flower/train/花文件名/*.jpg’
训练模型存储路径为:'D:/LearnMSA/flower/model/‘
测试样本路径及文件名为:'D:/LearnMSA/flower/test/花文件名/**.jpg‘
测试用图片文件从训练数据中任意拷贝一张即可。

训练模型

建立模型=导入库+获取数据集+图片处理+搭建模型+小批量处理+训练模型+保存模型

文件名:CnnFlower.py

from skimage import io, transform
import glob
import os
import tensorflow as tf
import numpy as np
import time
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

# 数据集地址
path='D:/LearnMSA/flower/train/'
#模型保存地址
model_path='D:/LearnMSA/flower/model/model.ckpt'

#设置图像处理后的大小
#分别是长*宽*通道3
w=100
h=100
c=3

# 1.读取图片
def read_img(path):
    # os.listdir(path)表示在path路径下的所有文件和和文件夹列表
    # 用cate记录十种花的文件路径
    cate=[path+x for x in os.listdir(path) if os.path.isdir(path+x)]
    imgs=[]                              #存放所有的图片
    labels=[]                            #图片的类别标签
    for idx,folder in enumerate(cate):

        # enumerate函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和下标,一般用在for循环当中
        for im in glob.glob(folder+'/*.jpg'):                          # 利用glob.glob函数搜索每个层级文件下面符合特定格式“/*.jpg”进行遍历
            try:
                print('reading the images:%s'%(im))                        # 遍历图像的同时,打印每张图片的“路径+名称”信息
                img=io.imread(im)                                          # 利用io.imread函数读取每一张被遍历的图像并将其赋值给img
                try:    #对异常图片进行处理
                    if img.shape[2] == 3:
                        img = transform.resize(img, (w, h))
                        imgs.append(img)
                        labels.append(idx)
                except:
                    continue
            except:
                print("Cannot open image!")
    # 利用np.asarray函数对生成的imgs和labels列表数据进行转化,之后转化成数组数据(imgs转成浮点数型,labels转成整数型)
    return np.asarray(imgs,np.float32),np.asarray(labels,np.int32)



data,label=read_img(path)
print('shape of data=',data.shape) #查看样本数组大小
print('shape od labels=',label.shape) #查看标签数组大小

#5.数据预处理
# 打乱顺序
###调用np.random.shuffle函数将有序数组变无序
###返回打乱顺序后的图片和对应的标签
num_example = data.shape[0]          #表示矩阵的行数
arr = np.arange(num_example)         #生成0到num_example个数
np.random.shuffle(arr)               # 随机打乱arr数组
data = data[arr]                     # 将data以arr索引重新组合
label = label[arr]                   # 将label以arr索引重新组合

# 将所有数据分为训练集和验证集
ratio = 0.8               #设置训练集比例
s = np.int(num_example*ratio)
x_train = data[:s]
y_train = label[:s]
x_val = data[s:]
y_val = label[s:]

# -----------------构建网络----------------------
#占位符设置输入参数的大小和格式
# 插入一个张量的占位符,这个张量总是被喂入图片数据。相当于一个形参。
x = tf.placeholder(tf.float32, shape=[None,w,h,c,], name='x') #用于传递样本数据
y_ = tf.placeholder(tf.int32, shape=[None,], name='Y_') #用于传递标签
print('x:',x.shape)
print('y:',y_.shape)

#6.建立训练模型
def inference(input_tensor,train,regularizer):
    # -----------------------第一层----------------------------
    with tf.variable_scope('layer1-conv1'):
        # 初始化权重conv1_weights为可保存变量,大小为5x5,3个通道(RGB),数量为32个
        conv1_weight = tf.get_variable('weight', [5, 5, 3, 32], initializer=tf.truncated_normal_initializer(stddev=0.1))
        # 初始化偏置conv1_biases,数量为32个
        conv1_bias = tf.get_variable('bias', [32], initializer=tf.constant_initializer(0.0))
        # conv1_weights为权重,strides=[1, 1, 1, 1]表示左右上下滑动步长为1,padding='SAME'表示输入和输出大小一样,即补0
        conv1 = tf.nn.conv2d(input_tensor, conv1_weight, strides=[1, 1, 1, 1], padding='SAME')
        # 激励计算,调用tensorflow的relu函数
        relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_bias))


    with tf.name_scope('layer2-pool1'):
        # 池化计算,调用tensorflow的max_pool函数,strides=[1,2,2,1],表示池化边界,2个对一个生成,padding="VALID"表示不操作。
        pool1=tf.nn.max_pool(relu1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='VALID')

    # -----------------------第二层----------------------------
    with tf.variable_scope('layer3-conv2'):
        # 定义第二个卷积层,原理和第一层相同
        conv2_weight = tf.get_variable('weight', [5, 5, 32, 64], initializer=tf.truncated_normal_initializer(stddev=.1))
        conv2_bias = tf.get_variable('bias', [64], initializer=tf.constant_initializer(0.0))
        conv2 = tf.nn.conv2d(pool1, conv2_weight, strides=[1, 1, 1, 1], padding='SAME')
        relu2 = tf.nn.relu(tf.nn.bias_add(conv2, conv2_bias))

    with tf.variable_scope('layer4-pool2'):
        pool2 = tf.nn.max_pool(relu2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')

    # -----------------------第三层---------------------------
    with tf.variable_scope('layer5-conv3'):
        # 定义第二个卷积层,原理和第一层相同
        conv3_weight = tf.get_variable('weight', [3, 3, 64, 128],
                                       initializer=tf.truncated_normal_initializer(stddev=.1))
        conv3_bias = tf.get_variable('bias', [128], initializer=tf.constant_initializer(0.0))
        conv3 = tf.nn.conv2d(pool2, conv3_weight, strides=[1, 1, 1, 1], padding='SAME')
        relu3 = tf.nn.relu(tf.nn.bias_add(conv3, conv3_bias))

    with tf.variable_scope('layer6-pool3'):
        pool3 = tf.nn.max_pool(relu3, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')

    # -----------------------第四层----------------------------
    with tf.variable_scope('layer7-conv4'):
        # 定义第二个卷积层,原理和第一层相同
        conv4_weight = tf.get_variable('weight', [3, 3, 128, 128],
                                       initializer=tf.truncated_normal_initializer(stddev=.1))
        conv4_bias = tf.get_variable('bias', [128], initializer=tf.constant_initializer(0.0))
        conv4 = tf.nn.conv2d(pool3, conv4_weight, strides=[1, 1, 1, 1], padding='SAME')
        relu4 = tf.nn.relu(tf.nn.bias_add(conv4, conv4_bias))

    with tf.variable_scope('layer8-pool4'):
        pool4 = tf.nn.max_pool(relu4, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')

        # 第八层输出的是矩阵:【6,6,128】,把矩阵变成向量,每张图片排列成6*6*128 的向量
        nodes = 6 * 6 * 128
        reshape = tf.reshape(pool4, [-1, nodes])
        # 使用变形函数转化结构

    # -----------------------第五层---------------------------
    with tf.variable_scope('layer9-FC1'):
        fc1_weight = tf.get_variable('weight', [nodes, 1024], initializer=tf.truncated_normal_initializer(stddev=0.1))
        if regularizer != None: tf.add_to_collection('losses', regularizer(fc1_weight))
        #
        fc1_biases = tf.get_variable('bias', [1024], initializer=tf.constant_initializer(0.1))
        fc1 = tf.nn.relu(tf.matmul(reshape, fc1_weight) + fc1_biases)
        if train: fc1 = tf.nn.dropout(fc1, 0.5)

    # -----------------------第六层----------------------------
    with tf.variable_scope('layer10-FC2'):
        fc2_weight = tf.get_variable('weight', [1024, 512], initializer=tf.truncated_normal_initializer(stddev=0.1))
        if regularizer != None: tf.add_to_collection('losses', regularizer(fc2_weight))
        fc2_biases = tf.get_variable('bias', [512], initializer=tf.constant_initializer(0.1))
        fc2 = tf.nn.relu(tf.matmul(fc1, fc2_weight) + fc2_biases)
        if train: fc2 = tf.nn.dropout(fc2, 0.5)

    # -----------------------第七层----------------------------
    with tf.variable_scope('layer11-FC3'):
        fc3_weight = tf.get_variable('weight', [512, 10], initializer=tf.truncated_normal_initializer(stddev=0.1))
        if regularizer != None: tf.add_to_collection('losses', regularizer(fc3_weight))
        # fc3_biases = tf.get_variable('bias', [5], initializer=tf.constant_initializer(0.1))		这个分类5,用于测试5种花卉
        fc3_biases = tf.get_variable('bias', [10], initializer=tf.constant_initializer(0.1))		#分10类
        logits = tf.matmul(fc2, fc3_weight) + fc3_biases

    # 返回最后的计算结果
    return logits

# ---------------------------网络结束---------------------------
#设置正则化参数为0.0001
regularizer=tf.contrib.layers.l2_regularizer(0.001)

#将上述构建网络结构引入
logits=inference(x,False,regularizer)
print('shape of logits:',logits.shape)

# (小处理)将logits乘以1赋值给logits_eval,定义name,方便在后续调用模型时通过tensor名字调用输出tensor
b=tf.constant(value=1,dtype=tf.float32)
logits_eval=tf.multiply(logits,b,name='logits_eval') #常数和矩阵想成

#设置损失函数,作为模型训练优化的参考标准,loss越小,模型越优
loss=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,labels=y_)
#设置整体学习率为α为0.001
optimizer=tf.train.AdamOptimizer(learning_rate=0.001)

#设置预测精度
train_op=optimizer.minimize(loss)
correct_prediction=tf.equal(tf.cast(tf.argmax(logits,1),tf.int32),y_)

#计算准确率
acc=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

#7训练和测试
#定义一个函数,按照批次取数据
def minibatches(inputs=None,targets=None,batch_size=None,shuffle=False):
    assert len(inputs)==len(targets)

    if shuffle:
        indices = np.arange(len(inputs))
        np.random.shuffle(indices)
    for start_idx in range(0, len(inputs) - batch_size + 1, batch_size):
        if shuffle:
            excerpt = indices[start_idx:start_idx + batch_size]
        else:
            excerpt = slice(start_idx, start_idx + batch_size)
        yield inputs[excerpt], targets[excerpt]



n_epoch=10
batch_size=64

saver=tf.train.Saver()
sess=tf.Session()
sess.run(tf.global_variables_initializer())

for epoch in range(n_epoch):
    print('epoch:',epoch+1)
    start_time=time.time()

    #training
    train_loss,train_acc,n_batch=0,0,0
    for x_train_a,y_train_a in minibatches(x_train,y_train,batch_size,shuffle=True):
        _,err,ac=sess.run([train_op,loss,acc],feed_dict={x:x_train_a,y_:y_train_a})
        train_loss+=err
        train_acc+=ac
        n_batch+=1

    print('train loss:%f'%(np.sum(train_loss)/n_batch))
    print("train acc: %f" % (np.sum(train_acc) / n_batch))
    #评估
    val_loss,val_acc,n_batch=0,0,0
    for x_vale_a,y_val_a in minibatches(x_val,y_val,batch_size,shuffle=False):
        err,ac=sess.run([loss,acc],feed_dict={x:x_vale_a,y_:y_val_a})
        val_loss+=err
        val_acc+=ac
        n_batch+=1

    print('validation loss : %f'%(np.sum(val_loss)/n_batch))
    print('validation acc: %f'%(np.sum(val_acc)/n_batch))
    print('epoch time:%f'%(time.time()-start_time))
    print('-------------------------------------------')

#8.保存模型
saver.save(sess,model_path) #把运算后的模型保存

sess.close()


运行这个py文件,会不断的读图,最后生成模型,运行图如下:
在这里插入图片描述
运行成功如下:
在这里插入图片描述
D:/LearnMSA/flower/model/ 下生成模型
在这里插入图片描述

测试模型1

测试模型=读取图片+导入模型+测试模型
文件名:test_independent.py

from skimage import io,transform
import tensorflow as tf
import numpy as np
import os
import glob  #glob 文件通配符模块
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

w=100
h=100
c=3

path1 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/0向日葵107.jpg"
path2 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/1樱花53.jpg"
path3 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/2水仙花178.jpg"
path4 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/3牡丹136.jpg"
path5 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/5百合花284.jpg"
path6 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/6莲花161.jpg"
path7 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/9郁金香119.jpg"
path8 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/4玫瑰1.jpg"
path9 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/8蝴蝶兰263.jpg"
path10 = "F:/DeskTop/大三下学期/机器学习/LearnMSA/flower/test/7菊花1.jpg"

flower_dict = {0:'向日葵',1:'樱花',2:'水仙花',3:'牡丹',4:'玫瑰',5:'百合花',6:'莲花',7:'菊花', 8:'蝴蝶兰', 9:'郁金香'}
model_path='D:/LearnMSA/flower/model/'

def read_one_image(path):
    img = io.imread(path)
    img = transform.resize(img,(w,h))
    return np.asarray(img)

with tf.Session() as sess:
    data = []
    data1 = read_one_image(path1)
    data2 = read_one_image(path2)
    data3 = read_one_image(path3)
    data4 = read_one_image(path4)
    data5 = read_one_image(path5)
    data6 = read_one_image(path6)
    data7 = read_one_image(path7)
    data8 = read_one_image(path8)
    data9 = read_one_image(path9)
    data10 = read_one_image(path10)

    data.append(data1)
    data.append(data2)
    data.append(data3)
    data.append(data4)
    data.append(data5)
    data.append(data6)
    data.append(data7)
    data.append(data8)
    data.append(data9)
    data.append(data10)
    saver = tf.train.import_meta_graph(model_path+'model.ckpt.meta')
    saver.restore(sess,tf.train.latest_checkpoint(model_path))

    graph = tf.get_default_graph()
    x = graph.get_tensor_by_name("x:0")
    feed_dict = {x:data}

    logits = graph.get_tensor_by_name("logits_eval:0")

    classification_result = sess.run(logits,feed_dict)

    #打印出预测矩阵
    print(classification_result)
    #打印出预测矩阵每一行最大值的索引
    print(tf.argmax(classification_result,1).eval())
    #根据索引通过字典对应花的分类
    output = []
    output = tf.argmax(classification_result,1).eval()
    for i in range(len(output)):
        print("第",i+1,"朵花预测:"+flower_dict[output[i]])


运行结果图如下:
在这里插入图片描述

测试模型2

设置一个文件夹的目录,读取目录下的图片,随机选择一个图片并显示处理
文件名:test.py

from skimage import io,transform
import tensorflow as tf
import numpy as np
import os
import matplotlib.pyplot as plt
from PIL import Image
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

w=100
h=100
c=3

path=r'D:/LearnMSA/flower/test/8蝴蝶兰/'
model_path='D:/LearnMSA/flower/model/'

flower_dict = {0:'向日葵',1:'樱花',2:'水仙花',3:'牡丹',4:'玫瑰',5:'百合花',6:'莲花',7:'菊花', 8:'蝴蝶兰', 9:'郁金香'}


# 随机选择一张图片
def get_one_image(path):
    # 输入参数:path,测试图片的路径
    # 返回参数:image,从测试图片中随机抽取一张图片
    print(path)
    allPic = []
    for pic in os.listdir(path):
        if pic.endswith("jpg") or pic.endswith("png"):
            allPic.append(pic)
            print(pic)

    n = len(allPic)
    ind = np.random.randint(0, n)
    img_dir = allPic[ind]  # 随机选择测试的图片

    img = io.imread(path + img_dir)
    img = transform.resize(img, (w, h))

    imgshow = Image.open(path + img_dir)
    plt.imshow(imgshow)
    plt.show()
    image = np.array(img)
    return image

with tf.Session() as sess:
    data = []
    data1 = get_one_image(path)
    data.append(data1)

    saver = tf.train.import_meta_graph(model_path+'model.ckpt.meta')
    saver.restore(sess,tf.train.latest_checkpoint(model_path))

    graph = tf.get_default_graph()
    x = graph.get_tensor_by_name("x:0")
    feed_dict = {x:data}

    logits = graph.get_tensor_by_name("logits_eval:0")
    classification_result = sess.run(logits,feed_dict)

    #打印出预测矩阵
    print(classification_result)
    #打印出预测矩阵每一行最大值的索引
    print(tf.argmax(classification_result,1).eval())
    #根据索引通过字典对应花的分类
    output = []
    output = tf.argmax(classification_result,1).eval()
    for i in range(len(output)):
        print("第",i+1,"朵花预测:"+flower_dict[output[i]])


运行结果如下:
在这里插入图片描述

结果预测跟文件夹里的图片一样,要提一点,要保证一些图片读取或者模型保存及读取的路径要正确,需要在程序里修改一下。

下一期再倒腾一个GUI的花卉识别

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于TensorFlow的CNN卷积网络模型花卉分类(1) 的相关文章

  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 在tensorflow.js中对张量进行分区、屏蔽或过滤

    我有 2 个相同长度的张量 data and groupIds 我想分开data通过相应的值分成几组groupId 例如 const data tf tensor 1 2 3 4 5 const groupIds tf tensor 0 1
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • Spark大数据分与实践笔记(第七章 Spark Streaming实时计算框架-01)

    第七章 Spark Streaming实时计算框架 近年来 在Web应用 网络监控 传感监测 电信金融 生产制造等领域 增强了对数据实时处理的需求 而Spark中的Spark Streaming实时计算框架就是为了实现对数据实时处理的需求而
  • 百度指数 Cipher-Text、百度翻译 Acs-Token 逆向分析

    K 哥之前写过一篇关于百度翻译逆向的文章 也在 bilibili 上出过相应的视频 最近在 K 哥爬虫交流群中有群友提出 百度翻译新增了一个请求头参数 Acs Token 如果不携带该参数 直接按照以前的方法进行处理 会出现 1022 报错
  • 集合(持续更新)

    棒棒有言 追逐梦想的过程就像是一个人在走一条黑暗 幽深而又漫长的隧道 多少次跌倒又爬起 经历了多少个暗无天日的黑夜与白天 一路上沉淀着难以计数的汗水与泪水 不断地自我暗示 只要自己坚持 只要勇敢地一向往前走 就必须能找到出口 必须会看到光明
  • react中收集表单数据的两种写法

    非受控组件写法 div div
  • 【前端demo】CSS border-radius可视化 原生实现

    文章目录 效果 原理 代码 前端demo系列目录 https blog csdn net karshey article details 132585901 效果 效果预览 https codepen io karshey pen zYyB
  • python:字典

    字典是是无序的键值对 key value 集合 同一个字典内的键必须是互不相同的 一对大括号 创建一个空字典 1 使用 del 关键字删除任意指定的键值对 2 使用 in 关键字查询指定的键是否存在于字典中 字典中的键必须是不可变类型 3
  • hmailserver邮件收不了邮件

    按下面步骤查看 首先就要把dns域名的mx记录配置好才能从别的邮件服务器接到邮件 域名 domain com的记录 http www hmailserver com documentation latest page ts receive
  • 【SpringBoot】整合Spring JDBC操作数据

    一 jdbc简介 JDBC Java DataBase Connectivity java数据库连接 是一种用于执行SQL语句的Java API 可以为多种关系数据库提供统一访问 它由一组用Java语言编写的类和接口组成 JDBC提供了一种
  • 《30天自制操作系统》入门方法总结

    30天自制操作系统 是一位日本大佬 川合秀实 老师所写的一本书 逻辑清晰 语言朴实 我跟着中文版的电子书学习了两天 感觉很好 在这里我就实操环节简单做一下总结 以帮助初学者更好的入门 1 操作系统和编辑器 我使用的是win10 64位 专业
  • 关联规则算法(Apriori算法、FP-Growth算法)小案例(python mlxtend)

    目录 一 Apriori 二 FP Growth 一 Apriori 算法理论部分参考 28条消息 Apriori算法与FP Tree算法 messi james的博客 CSDN博客 import pandas as pd 构造数据集 it
  • Unity打包安装包时出现CommandInvokationFailure: Gradle build failed.

    Unity打包安卓安装包时出现CommandInvokationFailure Gradle build failed 我首先是上网百度了一下 看到有许多方法 其中有人这样说 教训是 出现报错 不要上来就上网寻找答案 大家配置不一样 适合别
  • EMD(经验模态分解)算法 二

    上次基本搞懂了怎么用各种滤波器 这次重点看看EMD的算法应用 怎么调参数以产生不同的分解波形 EMD经验模态分解 emd lt as data frame emd xt diff load Load boundary wave stopru
  • 三进制计算机_一分钟基础:计算机为什么采用二进制?

    这是博主新想到的一个点子 旨在用最短的篇幅介绍知识 积少成多 希望朋友们能够有所收获 另外 最近事情属实太多 鸽了一个多月 感谢各位朋友没取关 我真不是在提醒各位取关 等忙完这段 希望自己也能做一个日更博主2333 PS 我改名了 最高权限
  • 请你说说instanceof 与 typeof的区别

    为什么 null instanceof Object是false 而typeof null是Object 在 JavaScript 中 null instanceof Object 的结果是 false 这是因为 null 是一个特殊的原始
  • android安卓开发调试经验

    android安卓开发调试经验 在哪查看错误信息 Run Console LogCat 常见错误 网络问题 检查权限
  • 【千律】C++基础:通过函数实现数据交换--指针方案

    include
  • 链表求和

    I 问题描述 你有两个用链表代表的整数 其中每个节点包含一个数字 数字存储按照在原来整数中相反的顺序 使得第一个数字位于链表的开头 写出一个函数将两个整数相加 用链表形式返回和 给出两个链表 3 gt 1 gt 5 gt null
  • RTT-移植Nano

    RTT 移植Nano 一 准备工作 STM32F103模板工程 RTT nano源码 https www rt thread org document site rt thread version rt thread nano an0038
  • Spring源码深度解析:九、bean的获取③ - createBeanInstance

    一 前言 文章目录 Spring源码深度解析 文章目录 createBeanInstance 的流程图如下 让我们根据流程图一步一步的学习一下spring是如何创建bean的吧 这篇文章是接着 Spring源码深度解析 八 bean的获取
  • 基于TensorFlow的CNN卷积网络模型花卉分类(1)

    一 项目描述 使用TensorFlow进行卷积神经网络实现花卉分类的项目 加载十种花分类 建立模型后进行预测分类图片 环境 win10 TensorFlow gpu 1 12 0 pycharm 训练集 训练数据存放路径为 D LearnM