Keras计算机视觉(二)
第一部分 认识CNN
一、quickly start
所见即所得,先看一下CNN在MNIST上的运行Demo
from keras import layers
from keras import modelsmodel = models.Sequential()
# 定义一个卷积输入层,卷积核是3*3,共32个,输入是(28, 28, 1),输出是(26, 26, 32)
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
# 定义一个2*2的池化层
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
# 将所有的输出展平
model.add(layers.Flatten())
# 定义一个全连接层,有64个神经元
model.add(layers.Dense(64, activation='relu'))
# 多分类问题,将输出在每个分类上的概率
model.add(layers.Dense(10, activation='softmax'))
model.summary()
打印网络结构
_________________________________________________________________
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
_________________________________________________________________
conv2d_1 (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 11, 11, 64) 18496
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 5, 5, 64) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 3, 3, 64) 36928
_________________________________________________________________
flatten_1 (Flatten) (None, 576) 0
_________________________________________________________________
dense_1 (Dense) (None, 64) 36928
_________________________________________________________________
dense_2 (Dense) (None, 10) 650
_________________________________________________________________
Total params: 93,322
Trainable params: 93,322
Non-trainable params: 0
_________________________________________________________________
加载数据开始训练
from keras.datasets import mnist
from keras.utils import to_categorical(train_images, train_labels), (test_images, test_labels) = mnist.load_data()train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
print('train data:', train_images.shape, train_labels.shape)
print('test data:', test_images.shape, test_labels.shape)# 训练数据准确的已经明显优于全连接网络
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(test_loss, test_acc)
train data: (60000, 28, 28, 1) (60000, 10)
test data: (10000, 28, 28, 1) (10000, 10)
0.025266158195689788
0.9919000267982483
二、卷积网络介绍
全连接层与卷积层根本的区别在于,全连接层从输入特征空间中学到的是全局模式,而卷积层学到的是局部模式
- 卷积神经网络具有平移不变性,一个地方学到的识别能力可以用到其他的任何地方
- 卷积神经网络可以学到模式的空间层次结构
# CNN在Keras上的API
tf.keras.layers.Conv2D(filters, # 卷积核的个数kernel_size, # 卷积核的大小,常用的是(3,3)strides=(1, 1), # 核移动步幅padding='valid', # 是否需要边界填充data_format=None,dilation_rate=(1, 1), activation=None, # 激活函数use_bias=True,kernel_initializer='glorot_uniform',bias_initializer='zeros',kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None,kernel_constraint=None, bias_constraint=None, **kwargs
)
2.1 卷积核运算
卷积计算类似于点积,一个矩阵(3, 3, 2)卷积(3, 3, 2)的结果是(1)
如上图所示:
输入为 (5, 5, 2) (高, 宽, 深度)
卷积核为 (3, 3, 2)
一个卷积核的输出为 (3, 3, 1)
三个卷积核的输出为 (3, 3, 3)
图中输出深度(1, 1, 3)表示的是三个卷积核在一个位置上的输出
2.2 边界填充Padding 
边界填充的目的是为了充分发掘边界的信息,确保每个点都成为过核心,所以
对于(3, 3)的卷积核,我们往左右同时增加一列;
对于(5, 5)的卷积核,我们左右同时增加两列。
参数padding='same’表示需要边界填充
2.3 卷积步幅strides
步幅很好理解,就是卷积核计算完后需要往下一格挪动几个位置
2.4 最大池化层MaxPooling
最大池化层通常使用2*2的窗口,步幅为2进行特征下采样
作用有二:
1、减少需要处理的特征图的元素个数
2、增加卷积层的观察窗口(即窗口覆盖原始输入的比例越来越大)
一个张量输入(28, 28, 32),经过(2, 2)的MaxPooling处理,输出张量(14, 14, 32),其过程直观的可以理解为取相邻(2, 2)矩阵里面的最大值。当然也有其他的处理方法,比如取平均值。
第二部分:CNN在Keras上的实践
一、做好基础数据准备
实践案例:猫狗分类
数据下载:https://www.kaggle.com/c/dogs-vs-cats/data
源数据: 2000 张猫的图像 + 2000 张狗的图像
数据划分: 2000 张训练,1000 张验证,1000张测试
- 数据准备,从下载好的数据中清洗出源数据
目录结构:
cat-dog-small
├─test
│ ├─cats 500张
│ └─dogs 500张
├─train
│ ├─cats 1000张
│ └─dogs 1000张
└─validation
├─cats 500张
└─dogs 500张
import os, shutil
# The path to the directory where the original
# dataset was uncompressed
original_dataset_dir = 'D://Kaggle//cat-dog//train'# The directory where we will
# store our smaller dataset
base_dir = 'D://Kaggle//cat-dog-small'
os.mkdir(base_dir)# Directories for our training splits
train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
train_cats_dir = os.path.join(train_dir, 'cats')
os.mkdir(train_cats_dir)
train_dogs_dir = os.path.join(train_dir, 'dogs')
os.mkdir(train_dogs_dir)# Directories for our validation splits
validation_dir = os.path.join(base_dir, 'validation')
os.mkdir(validation_dir)
validation_cats_dir = os.path.join(validation_dir, 'cats')
os.mkdir(validation_cats_dir)
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
os.mkdir(validation_dogs_dir)# Directories for our test splits
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)
test_cats_dir = os.path.join(test_dir, 'cats')
os.mkdir(test_cats_dir)
test_dogs_dir = os.path.join(test_dir, 'dogs')
os.mkdir(test_dogs_dir)# Copy first 1000 cat images to train_cats_dir
fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:src = os.path.join(original_dataset_dir, fname)dst = os.path.join(train_cats_dir, fname)shutil.copyfile(src, dst)# Copy next 500 cat images to validation_cats_dir
fnames = ['cat.{}.jpg'.format(i) for i in range(1000, 1500)]
for fname in fnames:src = os.path.join(original_dataset_dir, fname)dst = os.path.join(validation_cats_dir, fname)shutil.copyfile(src, dst)# Copy next 500 cat images to test_cats_dir
fnames = ['cat.{}.jpg'.format(i) for i in range(1500, 2000)]
for fname in fnames:src = os.path.join(original_dataset_dir, fname)dst = os.path.join(test_cats_dir, fname)shutil.copyfile(src, dst)# Copy first 1000 dog images to train_dogs_dir
fnames = ['dog.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:src = os.path.join(original_dataset_dir, fname)dst = os.path.join(train_dogs_dir, fname)shutil.copyfile(src, dst)# Copy next 500 dog images to validation_dogs_dir
fnames = ['dog.{}.jpg'.format(i) for i in range(1000, 1500)]
for fname in fnames:src = os.path.join(original_dataset_dir, fname)dst = os.path.join(validation_dogs_dir, fname)shutil.copyfile(src, dst)# Copy next 500 dog images to test_dogs_dir
fnames = ['dog.{}.jpg'.format(i) for i in range(1500, 2000)]
for fname in fnames:src = os.path.join(original_dataset_dir, fname)dst = os.path.join(test_dogs_dir, fname)shutil.copyfile(src, dst)
- 数据处理,一切都仰仗于ImageDataGenerator
按批次的从指定目录中获得图片,并解码、归一化
真的很方便、省心、稳
from keras.preprocessing.image import ImageDataGenerator# All images will be rescaled by 1./255
train_datagen = ImageDataGenerator(rescale=1./255)
validation_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)# 分批次的将数据按目录读取出来,ImageDataGenerator会一直取图片,直到break
train_generator = train_datagen.flow_from_directory(# This is the target directorytrain_dir,# All images will be resized to 150x150target_size=(150, 150),batch_size=20,# Since we use binary_crossentropy loss, we need binary labelsclass_mode='binary')validation_generator = validation_datagen.flow_from_directory(validation_dir,target_size=(150, 150),batch_size=20,class_mode='binary')test_generator = test_datagen.flow_from_directory(test_dir,target_size=(150, 150),batch_size=20,class_mode='binary')
Found 2000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
二、模型迭代
实践流程:
训练一个无任何优化的基准版本(acc 0.700)
----> 加入了数据增强的版本(acc 0.810)
----> 用预训练好的网络(acc 0.893)
----> 数据增强+预训练好的网络(acc 0.904)
----> 微调预训练的网络(acc 0.924)
----> 数据增强+微调预训练的网络(acc )
----> 待续(acc )
简而言之,越来越耗时,越来越准
2.1 基准网络,全凭灵感
我们搭建起一个四卷积层、四MaxPooling、一展开层、一全连接层、一输出层的基准网络
from keras import layers
from keras import modelsmodel1 = models.Sequential()
model1.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
model1.add(layers.MaxPooling2D((2, 2)))
model1.add(layers.Conv2D(64, (3, 3), activation='relu'))
model1.add(layers.MaxPooling2D((2, 2)))
model1.add(layers.Conv2D(128, (3, 3), activation='relu'))
model1.add(layers.MaxPooling2D((2, 2)))
model1.add(layers.Conv2D(128, (3, 3), activation='relu'))
model1.add(layers.MaxPooling2D((2, 2)))
model1.add(layers.Flatten())
model1.add(layers.Dense(512, activation='relu'))
model1.add(layers.Dense(1, activation='sigmoid'))
model1.summary()
Model: "sequential_3"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_8 (Conv2D) (None, 148, 148, 32) 896
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 74, 74, 32) 0
_________________________________________________________________
conv2d_9 (Conv2D) (None, 72, 72, 64) 18496
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 36, 36, 64) 0
_________________________________________________________________
conv2d_10 (Conv2D) (None, 34, 34, 128) 73856
_________________________________________________________________
max_pooling2d_9 (MaxPooling2 (None, 17, 17, 128) 0
_________________________________________________________________
conv2d_11 (Conv2D) (None, 15, 15, 128) 147584
_________________________________________________________________
max_pooling2d_10 (MaxPooling (None, 7, 7, 128) 0
_________________________________________________________________
flatten_3 (Flatten) (None, 6272) 0
_________________________________________________________________
dense_5 (Dense) (None, 512) 3211776
_________________________________________________________________
dense_6 (Dense) (None, 1) 513
=================================================================
Total params: 3,453,121
Trainable params: 3,453,121
Non-trainable params: 0
_________________________________________________________________
仔细介绍一下param参数的计算规则
- 全连接网络
total_params = (input_data_channels + 1) * number_of_filters
参数的总量等于一个神经元的参数量(W,b)乘上神经元个数
dense | filters | input_shape | output_shape |
dense_5 | 512 | (6272) | (None, 512) |
params = (6272 + 1) * 522 = 3211776 | |||
dense_6 | 1 | (512) | (None, 1) |
params = (512 + 1) * 1 = 513 |
- 卷积网络
total_params = (filter_height * filter_width * input_image_channels + 1) * number_of_filters
参数的总量等于一个卷积核的参数量(W,b)乘上卷积核的个数
Conv2D | filters | kernel_size | input_shape | output_shape |
conv2d_8 | 32 | (3, 3) | (150, 150, 3) | (None, 148, 148, 32) |
params = (3 * 3 * 3 + 1) * 32 = 896 | ||||
conv2d_9 | 64 | (3, 3) | (74, 74, 32) | (None, 72, 72, 64) |
params = (3 * 3 * 32 + 1) * 64 = 18496 | ||||
conv2d_10 | 128 | (3, 3) | (36, 36, 64) | (None, 34, 34, 128) |
params = (3 * 3 * 64 + 1) * 128 = 73856 | ||||
conv2d_11 | 128 | (3, 3) | (17, 17, 128) | (None, 15, 15, 128) |
params = (3 * 3 * 128 + 1) * 128 = 147584 |
from keras import optimizersmodel1.compile(loss='binary_crossentropy',optimizer=optimizers.RMSprop(lr=1e-4),metrics=['acc'])
history1 = model1.fit_generator(train_generator, # 训练数据生成器steps_per_epoch=100, # 每一个迭代需要读取100次生成器的数据epochs=30, # 迭代次数validation_data=validation_generator, # 验证数据生成器validation_steps=50) # 需要读取50次才能加载全部的验证集数据# loss的波动幅度有点大
print(model1.metrics_names)
print(model1.evaluate_generator(test_generator, steps=50))
输出:
[‘loss’, ‘acc’]
[1.3509974479675293, 0.7329999804496765]
73%的准确率有点低,加油。
2.2 基准调优,数据增强
通过对ImageDataGenerator实例读取的图像执行多次随机变换不断的丰富训练样本
# 将 train_datagen = ImageDataGenerator(rescale=1./255)
# 修改为
train_augmented_datagen = ImageDataGenerator(rescale=1./255,rotation_range=40, # 随机旋转的角度范围width_shift_range=0.2, # 在水平方向上平移的范围height_shift_range=0.2, # 在垂直方向上平移的范围shear_range=0.2, # 随机错切变换的角度zoom_range=0.2, # 随机缩放的范围horizontal_flip=True,)# 随机将一半图像水平翻转# Note that the validation data should not be augmented!
train_augmented_generator = train_augmented_datagen.flow_from_directory(train_dir,target_size=(150, 150),batch_size=32,class_mode='binary')
介绍一下flow_from_directory函数的图像增强处理逻辑
先看flow_from_directory伪代码
xm,y=getDataIndex()#获取所有文件夹中所有图片索引,以及文件夹名也即标签if shuffle==True:shuffle(xm,y)#打乱图片索引及其标签
while(True):for i in range(0,len(x),batch_size):xm_batch=xm[i:i+batch_size]#文件索引y_batch=y[i:i+batch_size]x_batch=getImg(xm_batch)#根据文件索引,获取图像数据ImagePro(x_batch)#数据增强#保存提升后的图片#saveToFile()yield (x_batch,y_batch)
顺序|乱序的将所有图片按张遍历、随机,然后重新开始遍历、随机,只要break不在,咱就不能停止造图片
# 重新训练一个模型
model2 = models.Sequential()
model2.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
model2.add(layers.MaxPooling2D((2, 2)))
model2.add(layers.Conv2D(64, (3, 3), activation='relu'))
model2.add(layers.MaxPooling2D((2, 2)))
model2.add(layers.Conv2D(128, (3, 3), activation='relu'))
model2.add(layers.MaxPooling2D((2, 2)))
model2.add(layers.Conv2D(128, (3, 3), activation='relu'))
model2.add(layers.MaxPooling2D((2, 2)))
model2.add(layers.Flatten())
model2.add(layers.Dropout(0.5)) # 新加了dropout层
model2.add(layers.Dense(512, activation='relu'))
model2.add(layers.Dense(1, activation='sigmoid'))model2.compile(loss='binary_crossentropy',optimizer=optimizers.RMSprop(lr=1e-4),metrics=['acc'])history2 = model2.fit_generator(train_augmented_generator,steps_per_epoch=100, # 每一批次读取100轮数据,总共是3200张图片epochs=100,validation_data=validation_generator,validation_steps=50)
运行时间大幅度提升,之前每轮是40秒+,现在每轮是60秒+,acc也有所提升,也还需提升
[‘loss’, ‘acc’]
[0.3123816251754761, 0.8121827244758606]
2.3 VGG16,站在前人的肩上
利用卷积神经网络的可移植性,我们可以使用已经在大型数据集上训练号的网络,常见的有VGG、ResNet、Inception、Inception-ResNet,本篇主要是VGG16。
首先是下载VGG16网络
from keras.applications import VGG16conv_base = VGG16(weights='imagenet', # 指定模型初始化的权重检查点include_top=False, # 模型最后是否包含密集连接分类器,默认有1000个类别input_shape=(150, 150, 3))
conv_base.summary()
输出网络结构
Model: "vgg16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) (None, 150, 150, 3) 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 150, 150, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 150, 150, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 75, 75, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (None, 75, 75, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (None, 75, 75, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (None, 37, 37, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (None, 37, 37, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (None, 37, 37, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (None, 37, 37, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (None, 18, 18, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (None, 18, 18, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (None, 18, 18, 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D) (None, 18, 18, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (None, 9, 9, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (None, 9, 9, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (None, 9, 9, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (None, 9, 9, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 4, 4, 512) 0
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0
_________________________________________________________________
先来一个基础版本的——锁定卷积基
完全冻结所有的网络参数,只使用卷积基的输出训练新分类器
# 将(原始数据,label)转换为VGG16的(卷积基输出,label)
def extract_features(directory, sample_count):features = np.zeros(shape=(sample_count, 4, 4, 512)) # 卷积基最后一层的输出为(4, 4, 512)labels = np.zeros(shape=(sample_count))generator = datagen.flow_from_directory(directory,target_size=(150, 150),batch_size=batch_size,class_mode='binary')i = 0for inputs_batch, labels_batch in generator:features_batch = conv_base.predict(inputs_batch) # 直接以VGG16的输出作为训练分类器的featuresfeatures[i * batch_size : (i + 1) * batch_size] = features_batchlabels[i * batch_size : (i + 1) * batch_size] = labels_batchi += 1if i * batch_size >= sample_count:# Note that since generators yield data indefinitely in a loop,# we must `break` after every image has been seen once.breakreturn features, labels
接下来只需要按照之前之前的步骤训练一个分类器即可,快得很
from keras import models
from keras import layers
from keras import optimizersmodel3 = models.Sequential()
model3.add(layers.Dense(256, activation='relu', input_dim=4 * 4 * 512))
model3.add(layers.Dropout(0.5))
model3.add(layers.Dense(1, activation='sigmoid'))model3.compile(optimizer=optimizers.RMSprop(lr=2e-5),loss='binary_crossentropy',metrics=['acc'])history3 = model3.fit(train_features, train_labels,epochs=30,batch_size=20,validation_data=(validation_features, validation_labels))
[‘loss’, ‘acc’]
[0.25353643798828124, 0.8930000066757202]
准确率已经到89%了,稳步提升中,
2.4 VGG16+数据增强,真强,也真慢
很自然,我们不满足于89%,我们自然会将数据加强融入其中,简单一点,直接将VGG16作为最终网络的一部分
from keras import models
from keras import layersmodel4 = models.Sequential()
model4.add(conv_base)
model4.add(layers.Flatten())
model4.add(layers.Dense(256, activation='relu'))
model4.add(layers.Dense(1, activation='sigmoid'))
model4.summary()
输出网络结构
Model: "sequential_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
vgg16 (Model) (None, 4, 4, 512) 14714688
_________________________________________________________________
flatten_5 (Flatten) (None, 8192) 0
_________________________________________________________________
dense_11 (Dense) (None, 256) 2097408
_________________________________________________________________
dense_12 (Dense) (None, 1) 257
=================================================================
Total params: 16,812,353
Trainable params: 16,812,353
Non-trainable params: 0
继续感受一下1,681万参数带来的震撼
编译网络之前,我们需要固定卷积基
print('This is the number of trainable weights ''before freezing the conv base:', len(model4.trainable_weights))conv_base.trainable = Falseprint('This is the number of trainable weights ''before freezing the conv base:', len(model4.trainable_weights))
输出
This is the number of trainable weights before freezing the conv base: 30
This is the number of trainable weights before freezing the conv base: 4
- 冻结之前
VGG16一共19层,5个block,去掉1个输出层,5个MaxPolling层,剩下13层,再加上两个全连接层,总共15层,每层两个可训练权重(主权重W和偏置权重b),trainable_weights=(13+2)*2=30 - 冻结之后
只有dense_11、dense_12两个全连接层可以训练,trainable_weights=2*2=4
准备编译
model4.compile(loss='binary_crossentropy',optimizer=optimizers.RMSprop(lr=2e-5),metrics=['acc'])history4 = model4.fit_generator(train_augmented_generator,steps_per_epoch=100, # 3200个输入图片,增强epochs=60,validation_data=validation_generator,validation_steps=50,verbose=2)model4.save('D://tmp//models//cats_and_dogs_small_4.h5')
print(model4.metrics_names)
print(model4.evaluate_generator(test_generator, steps=50))
[‘loss’, ‘acc’]
[0.23142974078655243, 0.9049999713897705]
之前一轮耗时60秒+,现在也就200秒+吧…好歹是acc上了90%
继续前行
2.5 锁定部分卷积基,微调模型
我们都知道越是靠近顶端(近输出层)的卷积层识别的内容越收敛于具体问题,一般优化思路就是组件的从顶端开始逐渐释放固定参数,适应当前问题
from keras import models
from keras import layersmodel5 = models.Sequential()
model5.add(conv_base)
model5.add(layers.Flatten())
model5.add(layers.Dense(256, activation='relu'))
model5.add(layers.Dense(1, activation='sigmoid'))
model5.summary()
将block5整个解放
# 分别是block5_conv1、block5_conv2、block5_conv3、block5_pool
conv_base.trainable = Trueset_trainable = False
for layer in conv_base.layers:if layer.name == 'block5_conv1':set_trainable = Trueif set_trainable:layer.trainable = Trueelse:layer.trainable = False
切记,一定是在编译之前操作
model5.compile(loss='binary_crossentropy',optimizer=optimizers.RMSprop(lr=1e-5),metrics=['acc'])history5 = model5.fit_generator(train_generator,steps_per_epoch=100,epochs=100,validation_data=validation_generator,validation_steps=50)print(model5.metrics_names)
print(model5.evaluate_generator(test_generator, steps=50))
[‘loss’, ‘acc’]
[1.8584696054458618, 0.9240000247955322]
训练集acc稳定在1,92%的acc还不够,训练集需要增强,模型参数也需要持续优化。
长路漫漫待你闯。
第三部分:CNN可视化
一、可视化网络中每一层的激活效果
可视化一下基准网络的每个卷积核激活效果
from keras.models import load_model
# 加载回来
model = load_model('D://tmp//models//cats_and_dogs_small_1.h5')
model.summary() # As a reminder.
回忆下网络结构
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_4 (Conv2D) (None, 148, 148, 32) 896
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 74, 74, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 72, 72, 64) 18496
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 36, 36, 64) 0
_________________________________________________________________
conv2d_6 (Conv2D) (None, 34, 34, 128) 73856
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 17, 17, 128) 0
_________________________________________________________________
conv2d_7 (Conv2D) (None, 15, 15, 128) 147584
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 7, 7, 128) 0
_________________________________________________________________
flatten_2 (Flatten) (None, 6272) 0
_________________________________________________________________
dense_3 (Dense) (None, 512) 3211776
_________________________________________________________________
dense_4 (Dense) (None, 1) 513
=================================================================
Total params: 3,453,121
Trainable params: 3,453,121
Non-trainable params: 0
_________________________________________________________________
加载一张cat的照片,顺便体会一下ImageDataGenerator的便利
# 加载一张测试图片
img_path = 'D://Kaggle//cat-dog-small//test/cats//cat.1574.jpg'# We preprocess the image into a 4D tensor
from keras.preprocessing import image
import numpy as npimg = image.load_img(img_path, target_size=(150, 150))
img_tensor = image.img_to_array(img)
img_tensor = np.expand_dims(img_tensor, axis=0)
# Remember that the model was trained on inputs
# that were preprocessed in the following way:
img_tensor /= 255.# Its shape is (1, 150, 150, 3)
print(img_tensor.shape)import matplotlib.pyplot as pltplt.imshow(img_tensor[0])
plt.show()
先从model里将layer的output获得
再通过input、output构建一个model
predict可以获得所有的卷积核处理图片后的channel_image
from keras import models# Extracts the outputs of the top 8 layers:
layer_outputs = [layer.output for layer in model.layers[:8]]
# Creates a model that will return these outputs, given the model input:
activation_model = models.Model(inputs=model.input, outputs=layer_outputs)# This will return a list of 5 Numpy arrays:
# one array per layer activation
activations = activation_model.predict(img_tensor)
分层的将channel_image打印出来
import keras# These are the names of the layers, so can have them as part of our plot
layer_names = []
for layer in model.layers[:8]:layer_names.append(layer.name)# 一行16张图片
images_per_row = 16# Now let's display our feature maps
for layer_name, layer_activation in zip(layer_names, activations):# 每一层都会有n_features张图片# This is the number of features in the feature mapn_features = layer_activation.shape[-1]# The feature map has shape (1, size, size, n_features)size = layer_activation.shape[1]# We will tile the activation channels in this matrixn_cols = n_features // images_per_row display_grid = np.zeros((size * n_cols, images_per_row * size))# We'll tile each filter into this big horizontal gridfor col in range(n_cols):for row in range(images_per_row):channel_image = layer_activation[0,:, :,col * images_per_row + row]# 尤为关键# Post-process the feature to make it visually palatablechannel_image -= channel_image.mean()channel_image /= channel_image.std()channel_image *= 64channel_image += 128channel_image = np.clip(channel_image, 0, 255).astype('uint8')display_grid[col * size : (col + 1) * size,row * size : (row + 1) * size] = channel_image# Display the gridscale = 1. / sizeplt.figure(figsize=(scale * display_grid.shape[1],scale * display_grid.shape[0]))plt.title(layer_name)plt.grid(False)plt.imshow(display_grid, aspect='auto', cmap='viridis')plt.show()
二、可视化激活的热力图
通过热力图我们可以直观的看到CNN是根据原始图像的哪一部分进行分类的
画热力图的方法是,
使用“每个通道对类别的重要程度”对“输入图像对不同通道的激活强度”的空间图进行加权,从而得到了“输入图像对类别的激活强度”的空间图
我们会用VGG16和下面这张图做一个简单的demo
加载一个完整的VGG16模型,终于
from keras.applications.vgg16 import VGG16
from keras import backend as K
# 如果你希望你编写的Keras模块与Theano(th)和TensorFlow(tf)兼容,
# 则必须通过抽象Keras后端API来编写
K.clear_session()# 加载完整的VGG16模型
# Note that we are including the densely-connected classifier on top;
# all previous times, we were discarding it.
model = VGG16(weights='imagenet')
把原始图片一顿处理后predict一下
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np# The local path to our target image
img_path = 'D:\\tmp\\creative_commons_elephant.jpg'# `img` is a PIL image of size 224x224
img = image.load_img(img_path, target_size=(224, 224))# `x` is a float32 Numpy array of shape (224, 224, 3)
x = image.img_to_array(img)# We add a dimension to transform our array into a "batch"
# of size (1, 224, 224, 3)
x = np.expand_dims(x, axis=0)# 将进行颜色标准化
x = preprocess_input(x)# 预测,并打印TOP3的分类
preds = model.predict(x)
一顿操作后得到最终的热力图heatmap
# This is the "african elephant" entry in the prediction vector
african_elephant_output = model.output[:, 386]# The is the output feature map of the `block5_conv3` layer,
# the last convolutional layer in VGG16
last_conv_layer = model.get_layer('block5_conv3')# This is the gradient of the "african elephant" class with regard to
# the output feature map of `block5_conv3`
grads = K.gradients(african_elephant_output, last_conv_layer.output)[0]# This is a vector of shape (512,), where each entry
# is the mean intensity of the gradient over a specific feature map channel
pooled_grads = K.mean(grads, axis=(0, 1, 2))# This function allows us to access the values of the quantities we just defined:
# `pooled_grads` and the output feature map of `block5_conv3`,
# given a sample image
iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]])# These are the values of these two quantities, as Numpy arrays,
# given our sample image of two elephants
pooled_grads_value, conv_layer_output_value = iterate([x])# We multiply each channel in the feature map array
# by "how important this channel is" with regard to the elephant class
for i in range(512):conv_layer_output_value[:, :, i] *= pooled_grads_value[i]# The channel-wise mean of the resulting feature map
# is our heatmap of class activation
heatmap = np.mean(conv_layer_output_value, axis=-1)
heatmap = np.maximum(heatmap, 0) # 小于0则设成0
heatmap /= np.max(heatmap) # 除最大值
使用OpenCV来将热力图与原图叠加
import cv2# We use cv2 to load the original image
img = cv2.imread(img_path)# We resize the heatmap to have the same size as the original image
heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0]))# We convert the heatmap to RGB
heatmap = np.uint8(255 * heatmap)# We apply the heatmap to the original image
heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)# 0.4 here is a heatmap intensity factor
superimposed_img = heatmap * 0.4 + img# Save the image to disk
cv2.imwrite('D:\\tmp\\elephant_cam.jpg', superimposed_img)
最终热力图完成
参考文章&图书
《Python深度学习》
系列文章
Keras深度学习入门(一)
Keras计算机视觉(二)
Keras文本和序列(三)
Keras深度学习高级(四)
Keras生成式学习(五)
@ 学必求其心得,业必贵其专精
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-3826148.html
如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!
北斗三号频点_全球首颗全面支持北斗三号基带芯片问世
原标题:全球首颗全面支持北斗三号基带芯片问世人民网北京5月21日电(赵竹青)北京合众思壮科技股份有限公司20日正式发布了天琴二代高精度星基增强基带芯片。据了解,这是全球首颗支持北斗三号全信号体制的高精度基带芯片,将大力推动北斗三号的产…...

稳定高效 扩展灵活 杰和高能效四路服务器发布在即
4月20日,杰和科技将在深圳召开"杰和梦,再出发"的新一代服务器发布会,届时,杰和将推出基于英特尔至强处理器E5 4600 V4家族的四路服务器GCR2524MP-RF。 作为一家领先的云计算、大数据、物联网设备和解决方案提供商&#…...

聚焦企业关键业务应用 杰和推四路服务器解决方案
当今,大数据所蕴含的业务价值和商业价值是不可估量的,无论是企业级或是小型企业都不断加大对大数据分析的投入,希望通过部署新的数据分析方案使企业以更低成本、更可靠的运行企业资源规划(ERP)、CRM等关键业务应用&…...

如何在填报场景中使用数据绑定获取数据源
背景 在公司的日常业务中,存在不少数据的收集提取需求,大部分公司会采取Excel来完成数据的收集和汇总,但这项工作会让负责信息收集的业务人员相当头大。虽然提前做好了数据收集模板,但最终提交上来的模板会被修改的五花八门&…...

Oracle-exists用法简单搞懂
Exists用法可能不太好理解,今天帮助大家简单搞懂 示范语句 使用exists: select * from T1 where exists(select 1 from T2 where T1.aT2.a) ; 使用in select * from T1 where T1.a in (select T2.a from T2) ; exists 用法 使用exists写法时…...

400企业智能服务器,杰和GT400塔式服务器力助企业信息化建设-文章-数字音视工程网DAV01.COM...
行业背景现阶段,企业对于信息化的认识逐渐深入,而信息化对于企业本身的作用也越来越大,信息部门在企业中所占的位置也越来越重,这是企业面对激烈市场竞争...行业背景现阶段,企业对于信息化的认识逐渐深入,而…...

python 导入模型h20_H2O是怎样让机器学习走进生活的?
各行业中的人工智能技术已经逐渐落地,为了社会和经济的稳定发展,普及人工智能越来越重要。H2O是一个开源分布式内存机器学习平台。关于H2O的研究和实验,本文作者已经有丰富的经验,并且发现它在解决ML问题上具有非常直观的效果。所…...

【网络教程】Iptables官方教程-学习笔记6-IPTABLES TARGETS
一、IPTABLES TAGRETS 本章节介绍Iptables 的目标和跳转(targets and jumps),目标和跳转负责告诉规则如何处理与规则匹配部分完全匹配的包。“ACCEPT”和“DROP”是一对基础目标,他们是首先处理的。在学习目标是如何完成之前,我们先看下跳转…...

第十四周作业
第十四周作业1.简述CGI与FASTCGI区别2.编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构3.通过loganalyzer展示数据库中的日志1.简述CGI与FASTCGI区别 CGI:收到请求,会fork一个新的进程进行处理;在处理数据方面࿰…...

SQL中的Exists 用法解释
exists的实例解析 现有两个表 a: b: 现有sql语句如下 select * from a where exists (select 1 from b where b.b_id a.id);执行结果如下: 含义解析:exists 的意思是用于检查子查询是否至少会返回一行数据,该子查询实际上并…...

exists 用法
/****** Script for SelectTopNRows command from SSMS ******/SELECT * FROM [MyDB].[dbo].[LbShops] where biz_type 1 and not exists ( SELECT shop_strid FROM [MyDB].[dbo].[shop_sell] where shop_strid [LbShops].shop_strid ) 速度很快 转载于:https://www.cnblogs.…...

git提交报husky > commit-msg hook failed (add --no-verify to bypass)的错
记录一下这次报错,报错信息主要如下: husky > commit-msg hook failed (add --no-verify to bypass) 问了一下leader,是因为项目之前更新了依赖,我重新拉下来的没有装最新的依赖 解决方法:重装依赖 npm i 重新…...

第二十章《Java Swing》第8节:选择器
在Swing体系中有文件选择器和颜色选择器,它们分别用来帮助用户选择文件和颜色,这些选择操作是可视化桌面应用程序常用的操作,本小节将详细讲解这两种选择器的使用方式。 20.8.1文件选择器JFileChooser 文件选择器用于选择文件或文件夹。当用户打开一个文件时需要用文件选择…...

自动驾驶领域常见英文缩写及其中文含义(不断完善中)
英文缩写英文全称中文全称ABSantilock brake system防抱死制动系统ACCAdaptive Cruise Control自适应巡航ADASAdvanced Driver Assistance System高级驾驶辅助系统AEBAutonomous Emergency Braking自动紧急制动APSAutomated Parking System自动泊车辅助BCWBlind Collision Warn…...

k3s+traefik+cert-manager+letsencrypt实现web服务全https
1. 简介 随着 HTTPS 不断普及,越来越多的网站都在从 HTTP 升级到 HTTPS,使用 HTTPS 就需要向权威机构申请证书,需要付出一定的成本,如果需求数量多,也是一笔不小的开支。cert-manager 是 Kubernetes 上的全能证书管理工…...

Java开发热门前沿知识!跳槽面试大厂被拒
前言 当前我们都会说SpringBoot是Spring框架对“约定优先于配置理念的最佳实践的产物,一个典型的SpringBoot应用本质上其实就是一个基于Spring框架的应用,而如果大家对Spring框架已经了如指掌,那么,在我们一步步揭开SpringBoot微…...

杰和的NAS新定义:网络+应用+存储的三者融合
6月15日 昨日,杰和科技发布新一代NAS服务器,对NAS进行了重新定义,杰和认为,NAS不只是网络附属存储 (Network Attached Storage),而是网络应用存储的三者融合。杰和同时展示的还有NAS全系列产品方案和存储管理的新系统…...

html里的底部c怎么打出来,版权所属符号-网站底部版权符号怎么打出来
Emoji 的表情符号是否有版权归属,如果是在word中输入。点击 插入>符号>特殊字版权所有者使用快捷键Ctrl Alt C。在FrontPage、Dreamweaver中与Word类在程序中,版权符号©等同于©在记事本中显示。按住Alt键不放,再利用小键盘输…...
在Linux下查看HBA卡的速率和状态
平时在Linux下映射存储,都是映射哪台就给哪台插线,然后在存储端扫描WWPN,简单粗暴,没技术含量。当然,光交下也可以看。 1,查看当前卡的品牌,常用的卡有两种,Emulex和Qlogic。 lspc…...

杰和G330整合博锐技术 优化企业IT的管理和安全
企业级用户,尤其是大中型企业,办公电脑数量需求庞大,如何节约后续成本?同时企业数据安全又得到保障?企业IT环境始终保持健康、良性发展,在方案整合上对硬件平台技术要求特别高。 英特尔vPro博锐技术是针对企…...

基于javaweb的企业绩效考核管理系统(java+ssm+jsp+bootstrap+jquery+mysql)
基于javaweb的企业绩效考核管理系统(javassmjspbootstrapjquerymysql) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 …...
听说H2O能让大家都会用机器学习?
https://www.toutiao.com/a6684846840065556995/ 各行业中的人工智能技术已经逐渐落地,为了社会和经济的稳定发展,普及人工智能越来越重要。 H2O是一个开源分布式内存机器学习平台。关于H2O的研究和实验,本文作者已经有丰富的经验,…...

Qt入门-文件读写
二进制文件的读写文件可以使用QFile类、QStream 文本文件的读写建议使用QTextStream类,它操作文件更加方便。 打开文件时,需要参数指定打开文件的模式: Constant Value Description QIODevice::NotOpen 0x0000 The device is not open. QIO…...

macos技巧[设置快捷键和window差不多]
设置快捷键和window差不多 macOS的键盘和window有很大的差别,造成了期快捷键和windows差别也很大,目前发现调换ctrl和com建比较适合window的用法,设置前的快捷键配置: 设置后的快捷键配置: 其他快捷键配置࿱…...

QIODevice 类学习笔记
QIODevice 类学习笔记 Isaaccwoo 2015年12月10日 一、 简介 QIODevice用于对输入输出设备进行管理。输入设备有两种类型,一种是随机访问设备(Random-accessdevices),如文件、缓冲区等;另一种是时序设备&#x…...

h2o包 常见问题
问题一之安装 当我们正常安装H2O时,经常出现如下问题: install.packages("h2o") Installing package into ‘C:/Users/gyk/Documents/R/win-library/3.6’ (as ‘lib’ is unspecified) 试开URL’https://cran.rstudio.com/bin/windows/cont…...

python环境安装H2O
H2O平台介绍 概括来说是一个做分布式机器学习深度学习的平台。 H2Ocloud是它的云平台,可以在线建模,管理模型,管理App,用MLOP和AppStore这两个模块。 H2O HT是云平台建模的版块,主要是机器视觉和自然语言处理。 Dr…...

Windows 11 版本介绍
Windows 11-微软公司于2021年发布的桌面端操作系统 Windows 11百科 Windows 11是由微软公司(Microsoft)开发的操作系统,应用于计算机和平板电脑等设备 。于2021年6月24日发布 ,2021年10月5日发行 。 Windows 11提供了许多创新功…...

IBM P570 更换风扇
IBM P570 更换风扇过程 前提:停止应用再操作 1 查看错误日志 通过命令查看错误 LABEL: SCAN_ERROR_CHRP IDENTIFIER: BFE4C025 Date/Time: Sun Apr 18 11:22:48 BEIST 2010 Sequence Number: 12788 Machine Id: 00CBF25C4C00 Node…...

onTaskFailed: Failed Loading plugin Pipeline: Stage View Plugin v2.13 (pipeline-stage-view)解决方法
【现象】 2020-02-28 07:50:23.8420000 [id30] SEVERE jenkins.InitReactorRunner$1#onTaskFailed: Failed Loading plugin Pipeline: Stage View Plugin v2.13 (pipeline-stage-view) java.io.IOException: Failed to load: Pipeline: Stage View Plugin (2.13) - Plugi…...

SQL学习:not exists用法
SQL学习:not exists用法 与 not in 的效果一样, 但这个效率相对高一点 例如: a1表:id name 1 张三 2 李四 a2表:id name 1 张三 2 李四 刚使用的新手用法可能是这样子的, 以为跟 not in 一样,但是下面这样写达不到预期效果 select * fro…...

杰和N60E-O荣获德国Hardwareinside金牌奖
“不断超越,只为更好”2016年11月3日,杰和 N60E-O凭借优异的整体性能和极高的性价比,在德国知名媒体Hardwareinside的评测中荣获金牌奖。 杰和科技作为服务器行业的后起之秀,顺势推出一系列备受好评的服务器产品及解决方案。目前&…...

Elasticsearch嵌套式对象Nested分析
原文请参考: https://www.felayman.com/articles/2017/11/10/1510292946325.html nested结构是Elasticsearch提供关系存储的一种特殊的结构,是NOSQL的一种高级特性,在传统的关系型sql中,很难做到一行记录中存储某个实体以及附属的内容,比如某个用户下评论数据&…...

JAVA智能推荐的卫生健康系统计算机毕业设计Mybatis+系统+数据库+调试部署
JAVA智能推荐的卫生健康系统计算机毕业设计Mybatis系统数据库调试部署 JAVA智能推荐的卫生健康系统计算机毕业设计Mybatis系统数据库调试部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技…...

JQuery实现图片切换(自动切换+手动切换)
学习JS的时候本来积攒了很多有趣的小例子,但是苦于没有找到一些好的平台来展示这些JS效果。今天发现了RunJS这个分享代码的平台,迫不及待得想跟大家分享。 在浏览各大商城网站的时候,或者某些网站的首页,都会展示与本网站相关的一…...

远程控制桌面计算机怎么填写,如何远程控制电脑,使用电脑的远程桌面功能?...
通过远程桌面功能我们可以实时的操作这台计算机,在上面安装软件,运行程序,所有的一切都好像是直接在该计算机上操作一样。那么该如何远程控制电脑,使用电脑的远程桌面功能呢?下面一起来看一下。操作方法01首先我们鼠标…...

语音识别框架speechbrain---speaker-recognition说话人识别/声纹识别:模型评价(2)
EER 与 minDCF计算—基于自己数据的模型(cosine) (1)构建验证verification文件 def create_veri_file(data_folder, save_file):"""生成验证txt文件"""dev_save_path = []with open(save_file, "w") as f...

linux复制文件夹中前N个文件到其他目录下
linux复制文件夹中前N个文件到其他目录下 方法一:指令 指令需要在源文件夹路径下运行 ls |head -n N |xargs -i cp {} /data/bertram/test 注:N指前n行 如果目录下还有其他文件夹,则需递归方式(-r)进行拷贝&#x…...

linux 复制文件夹 命令
CP命令 格式: CP [选项] 源文件或目录 目的文件或目录 选项说明: -b 同名,备分原来的文件 -f 强制覆盖同名文件 -r 按递归方式保留原目录结构复制文件 例: cp -r /home/test /tmp...

VC++编写远程控制软件
VC编写远程控制软件 1.远程控制软件编写之一界面设计 2.远程控制软件编写之二套接字操作 3.远程控制软件编写之三密码验证1 4.远程控制软件编写之四密码验证2 5.远程控制软件编写之五密码验证3 6.远程控制软件编写之六2密码验证4 7.远程控制软件编写之七磁盘显示1 8.远程控制软…...

一文读懂「TTS语音合成技术」
有没有发现,我们与机器的对话正变得愈发灵动与自然?人机交互越来越广泛地应用在我们的生活中,而这些都离不开语音合成技术的与时俱进。 语音合成,即TTS,是语音数据采集的重要方式。本期澳鹏干货,我们将带你…...

mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换
一、字符集介绍:1、ASCIIASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,标准的单字节字符编码方案,用于基于文本的…...

常见的语音交互平台的简介和比较
语言识别已经成为越来越普遍的应用场景了。现在可以基于一些语音平台进行二次开发。 1.概述 最近做了两个与语音识别相关的项目,两个项目的主要任务虽然都是语音识别,或者更确切的说是关键字识别,但开发的平台不同,一个是windows下…...

elasticsearch数据类型--nested
前面写到了object数据类型,这里来说说nested。按照官方文档的说法,nested是特殊的object类型,弥补了object对象不能单独作为整体进行检索的缺陷。为了达到这个目的,nested在es内部是作为隐藏文档存储的。下面来详细说明。 先来看…...

高性能linux构建Cf游戏,构建CF卡Linux系统的几个常见难题
关于如何在cf卡上构建linux ,从网上可以找到很多文章,如:许德新 《嵌入式Linux在PC104平台上的构建与实现》等等。这里主要介绍我在cf卡上构建linux系统中碰到的问题和 解决方法。采用硬件是:板子是研祥 104-1621CLDN,…...

navigator.language 代表的是浏览器的语言?
navigator.language 代表的不是浏览器的语言,而是用户更喜欢的语言,也就是各浏览器优先语言排行榜的第一名,但是chrome这回让我们失望了,火狐是可以的?手机端在设置 里面改变语言,也就改变了浏览器的优先语…...

Kali浏览器显示无法连接服务器,kali 中安装Chromium Web Browser并解决浏览器无法启动问题...
首先运行以下命令安装chromiumapt install updateapt install chromium在安装过程中可能会出现E:sub-process /usr/bin/dpkg returned an error code(1)的报错,解决方法如下:cd /var/lib/dpkg/mv info/ info_bakmkdir infoapt updateapt -f installmv in…...

java es nested,Nested
Nested嵌套数据类型nested类型是一种对象类型的特殊版本,它允许索引对象数组,独立地索引每个对象。如何使对象数组变扁平内部类对象数组并不以你预料的方式工作。Lucene没有内部对象的概念,所以Elasticsearch将对象层次扁平化,转化…...

从零到一搭建基础架构(3)-base模块搭建上篇
前后端交互结构混乱,response中业务code定义没有一个统一的规范PO、DTO、BO、VO傻傻分不清楚工具类泛滥,同一工程中StringUtil的引用有外部引入,有内部jar包引入还有自己定义的异常定义混乱,导致在Spring统一response拦截的地方区…...

开源的远程桌面软件RustDesk
本文是应网友 figo 的要求写的 什么是 RustDesk ? RustDesk 是一款开源的远程桌面软件,开箱即用,无需任何配置。您完全掌控数据,不用担心安全问题。可以使用官方的注册/中继服务器, 或者自己架设。 今天我们要做的就是…...

linux 复制文件夹下的所有内容到目标文件夹
在linux 下可以使用cp 命令去复制内容例如 #复制到目录文件夹* 和 . 代表目录下的所有文件 cp ~/temp/* ~/text/ cp ~/temp/. ~/text/ #复制到当前文件夹 cp ~/temp/* ./ cp ~/temp/. ./但是如果被复制的的文件夹下还有文件夹的话,则需要加上 -r #这样就会将该目录下的所有文…...

nested查询
包装另一个查询以搜索nested字段。 nested查询搜索nested字段对象,就好像将它们作为单独的文档进行索引一样。如果对象匹配搜索,nested查询返回根父文档。 示例 索引设置 要使用nested查询,索引必须包含nested字段映射。例如: PUT /my-i…...

Linux cp复制文件或文件夹
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录࿰…...

白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系
文章目录概述官网示例Object datatype让ES自动创建索引,插入一条数据查看mapping需求: 被年龄是28岁的黄药师评论过的博客查询结果不对原因分析Nested datatype解决object查询不对的问题修改mapping,将comments的类型从object设置为nested写入…...

第五代TTS语音芯片SYN8086性能再突破
自SYN8086TTS芯片诞生以来,经过不断优化调试,其性能目前已经达到最佳工作状态。相比上一代TTS芯片而言,SYN8086不但继承了SYN6658语音芯片的全部优势,其它各项指标更是领跑业内同类产品。精巧体积 QFN40封装,体积5*5M…...

百度 tts 语音合成前端无法播放问题解决
看官网示例 修改返回值 返回值是 base 64 格式。 将 返回值中的 audio/x-mpeg 修改为 audio/wav 即可 <p>继续加油</p> <audio controls"controls" src"data:audio/wav;base64,//MoxAALMGZYAHiGKEOBaPzyyjQKxjQqowkwRqJIKHwq1iEvaoyIxrkCi7LE…...

java 笛卡尔积_笛卡尔乘积-java代码
好久没摸过程序了,重新捡起java写了个笛卡尔乘积算法。自我感觉非常精简通用,这算是码力不减,码刀不老?package my.table;import java.util.Arrays;public class Descates {int[] sizes;int[] indexs;public Descates(int[] sizes) {this.si…...

Windows下卸载Oracle
用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢? 那就是直接注册表清除,步骤如下: 1、 开始->设置->控制面板->管…...

Elasticsearch Nested类型深入详解
0、概要 在Elasticsearch实战场景中,我们或多或少会遇到嵌套文档的组合形式,反映在ES中称为父子文档。 父子文档的实现,至少包含以下两种方式: 1)父子文档 父子文档在5.X版本中通过parent-child父子type实现࿰…...

Octavia 的实现与分析(OpenStack Rocky)
目录 文章目录目录Octavia基本对象概念基本使用流程软件架构服务进程清单代码结构loadbalancer 创建流程分析network_tasks.AllocateVIPnetwork_tasks.PlugVIPAmphoraAmphora AgentAmphoraAPIClientAmphoraePostVIPPlug启动 Keepalived 服务进程listener 创建流程分析启动 hapr…...

计算机毕业设计Java销售企业报价管理系统(源码+系统+mysql数据库+Lw文档)
计算机毕业设计Java销售企业报价管理系统(源码系统mysql数据库Lw文档) 计算机毕业设计Java销售企业报价管理系统(源码系统mysql数据库Lw文档)本源码技术栈: 项目架构:B/S架构 开发语言:Java语…...

java毕业生设计学生自购书平台计算机源码+系统+mysql+调试部署+lw
java毕业生设计学生自购书平台计算机源码系统mysql调试部署lw java毕业生设计学生自购书平台计算机源码系统mysql调试部署lw本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:La…...

java计算机毕业设计web在线考试系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计web在线考试系统MyBatis系统LW文档源码调试部署 java计算机毕业设计web在线考试系统MyBatis系统LW文档源码调试部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术&…...

Could not load file or assembly ‘Newtonsoft.Json‘
Could not load file or assembly Newtonsoft.Json or one of its dependencies. Manifest definition does not match the assembly reference 1.删除APP.CONFiG中的引用; 2.删除项目文件中的引用; 3.通过包安装管理器中心安装...

C#调用Rust dll测试
C#调用Rust dll,重点在于字符串传递,其他类型比较自然。可以给函数传递json字符串,在传出json字符串,两端通过json序列化、反序列化,可以方便处理参数数据。也可以传递不带字符串的结构体(结构体内含字符串…...

c语言json数组转字符串数组中,在C#中将字符串数组转换为json对象
我建议使用Newtonsoft.Json NuGet包,因为它使处理JSON变得微不足道.您可以执行以下操作:var request new String[2];request[0] "Name";request[1] "Occupaonti";var json JsonConvert.SerializeObject(request);哪会产生:[&quo…...

c语言josn序列化和反序列化,.net json序列化与反序列化
JSON.NET使用Json.NET类库需要引入的命名空间 using Newtonsoft.Json;PS:可用[JsonIgnore]标记不序列化的属性public ActionResult GetJsonDemo(){//对象DataModel model new DataModel();model.ID 2;model.Name "LiSi";model.Sex "男";mod…...

c语言中大括号怎么垂直下移,vs 中大括号之间垂直虚线显示
51CTO博客开发在使用的时候,发现其两个问题setEnable并么有什么卵用关于onFling的设置,只滑动一张,在一个页面显示有多个海报,也是没有什么卵用对于FancyCoverFlow,虽然封装很好但都是基于gallery的,然onFl…...

百度语音识别API C语言,百度语音识别(采集麦克风声音 并自动转为文字)
代码片段和文件信息using System;using System.Windows.Forms;using System.Collections.Generic;using System.ComponentModel;using System.IO;using System.Net;using System.Text;using System.Runtime.InteropServices;using System.Drawing;using BATT.AudioModule;names…...

常用复制对象方法效率对比
1.背景 在我们日常代码中,经常会用到对象之间的相互转换,将一个对象的属性复制赋值给另一个对象。今天我们就来测试下常见的几种复制对象的方法效率问题。 2.实体类 我们先准备两个实体类用于复制对象,一个是StudentFirst,另一…...

C#上位机开发(十七)—— 基于NuGet安装并使用包(Visual Studio)
一、NuGet 微软官方文档:https://docs.microsoft.com/zh-cn/nuget/。 NuGet 是适用于 .NET 的包管理器。 它使开发人员能够创建、共享和使用有用的 .NET 库。 NuGet 客户端工具可生成这些库并将其作为“包”。 二、添加 Newtonsoft.Json Nuget 包 1. 创建项目 可将 NuGe…...

xml转json c语言,c#动态类转json,再由json转xml
直接上代码了,多说无意了。using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Dynamic;using System.Runtime.CompilerServices;using Newtonsoft.Json;using System.Xml;using System.Xml.Serial…...

c语言中system data,无法绑定由多个部分组成的标识符“System.Data.DataRowView”
51CTO博客开发SQL Server中Rollup关键字使用技巧.net 中不用配置文件连接SQLite数据库,配置参数写在代码中CRC查表法实现以及表生成(支持CRC8,16,32)关于我我的博客 | 欢迎关注引言json是我们在工作中经常用到的一种数据传输格式,开始过程中解析json是我…...

nyoj c语言 回文数,回文数二(acm训练)
问题 1161: [回文数(二)] 时间限制: 1Sec 内存限制: 128MB 提交: 133 解决: 51 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数87: STEP1:8…...

c语言数字转字符串不用函数,不使用c的任何库函数 实现字符串到整数的转换 整数到字符串的转换...
转载请标明出处:http://www.cnblogs.com/NongSi-Net/p/6805844.html今天主要总结下:完成编程:1、除printf函数之外,不用任何c语言库函数,实现将字符串转化为整数的函数myatoi(可以支持负整数的转化)。2、除printf函数之…...

C语言界面列表的滑动效果,jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)...
本文实例讲述了jQueryajax实现滚动到页面底部自动加载图文列表效果。分享给大家供大家参考,具体如下:/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">滚动到页面顶部加载.mainDiv {width: 800px;border: solid 1px #f00…...

c语言trimall函数用法,Trim、Ltrim、AllTrim 函数区别
首先检查:catalina.[date].log错误信息:信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found51CTO博客开发技術資料下載…...

c语言 json序列化,.NET中JSON的序列化和反序列化的几种方式
一、什么是JSONJSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立 于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON 成为理想的数据交换语…...

c语言创建json嵌套,asp.net提取多层嵌套json数据的方法
本文实例讲述了asp.net提取多层嵌套json数据的方法。分享给大家供大家参考,具体如下:在.net 2.0中提取这样的json:{"name":"lily","age":23,"addr":{"city":guangzhou,"province&quo…...

常用的c语言类库,[转]C#常用开源类库收集
.net PDF 类库PDFsharp是一款可以让.NET框架支持的任何语言很容易的创建PDF文件的类库。FO PDF 是一款C#编写类似于ASP.NET服务器控件的控件。它接受DataTable 和一些其它参数来创建XSL FO,并使用NFOP (Apache FOP Port in J#) PDF Formatter来绘制一个类似PDF Repo…...

c语言遍历json数组,如何使用c动态获取所有json元素?
json.net库中的jtoken对象非常有用,您可以访问json对象和数组,而不需要一组复杂的域模型类。当我必须访问复杂对象图的一些独立属性时,我使用它。我不想为了访问几个属性而定义一大堆样板类。当您不知道json如何或何时更改时,jtoken类型也非常有用。使类层次结构保持最新是非常…...

bson as json c语言,从BSON序列化为JSON(示例代码)
我正在尝试将从MongoDB返回的一些BSON序列化为JSON:var bson MongoDB.Bson.BsonDocument.Parse("{""_id"": ObjectId(""5a45a64ec7fe121dfc673c6f""),""MyOtherId"": ObjectId(""5a45…...

c# 调用c语言dll,c# 调用c 的dll
richTextBox2.SelectionStart richTextBox2.Text.Length;richTextBox2.SelectionLength 0;richTextBox2.Focus();以上内容转自博客使用C# OLEDB方式 更新excel中的数据时候,发现报错{"Operation must use an updateable query."}连接逻辑如下࿱…...

c语言 sizeof typeof,checked、is、as、sizeof、typeof运算符、空合并运算符
51CTO博客开发Coders Textusing System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.Text;using System.Threading.Tasks;using Xinleda.Common;usin.net 中不用配置文件连接SQLite数据库,配置参数写在代码中CRC查表法…...

c语言putchar输出变量,【C语言】- 数据输出-printf( )和putchar( )
格式化输出函数printf( )printf( )功能:向系统指定输出设备按指定的格式输入任意个任意类型的数据,并返回实际输出的字符数。若出错,将返回负数。printf( )使用形式:printf("格式控制字符串",输出项列表);格式字符(以&q…...

对main函数的理解c语言,C语言编程漫谈——main函数
写在前面促使我写这篇文章是因为我这几天找了几个一样是大三的同学,与我相同专业相同方向(物联网)的人,除了小胡同的诗,基本没有什么其他人会现在看起来很简单的编程题目了。问了一下其他同学,他们大部分都说自己C语言是混过的&am…...

推荐两个比较好的中文区块链社区
在阅读完上一篇博客提及的区块链基本知识的术书后,开始着手先学习以太坊,再学习超级账本,在网上搜罗了很多文章,太烦太杂,在此推荐给大家两个比较好的区块链社区: 1、https://learnblockchain.cn/ ---深入…...

区块链社区是什么?为什么想着去做区块链社区呢?看看来拓客社区创始人谭一怎么说的
区块链微姐:为什么要想着去做区块链社区呢?而且是一个纯粹的区块链社区,这样就不担心不赚钱? 谭一:我们来拓客口号是连接100万区块链从业者,对于普通用户,我们平台资料都是免费的,并…...

【区块链专题】基本概念
声明:以下区块链相关概念及定义来源于维京研究院&甲子智库《区块链行业词典》,不用做任何商业用途,欢迎知识共享。 1、区块链定义 区块链/ Blockchain 区块链技术是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。 块…...

专业区块链技术社区
想知道更多区块链技术问答,请百度【链客区块链技术问答社区】,有专业的区块链技术问答。 如果发了币想要上交易所,合约需要怎么写呢? 答:从业务角度,上交易所就是谈合同了,给多少钱,…...

stm32 笔记 PWM及HAL库应用
stm32 PWM原理 STM32 使用一个定时器作为 PWM 输出,在上图中,ARR 即为重装载值。在计数器的值大于CRRx的值并且小于 ARR 之间,即区分高低电平。输出在图中分别有 ① 和 ② 两种情况. 分别为: ①CRR 和 ARR 区间为低电平。 ②CR…...

EOS Cannon 创始人楷书:社区强,区块链则强;社区弱,区块链则弱
7月15日EOS引力区引力生态峰会在深圳召开,EOSCannon创始人楷书在会上发表观点:与互联网时代从上而下打造的社区不同,区块链时代,社区是自下而上成立的,区块链项目除了代码,最重要的社区。以EOS为例…...
新书推荐 |《区块链社区运营手册》
新书推荐《区块链社区运营手册》长按二维码了解及购买区块链首席运营官带你从0到1入门区块链社区运营、掌握核心运营理念与技巧!编辑推荐区块链首席运营官带你从0到1入门区块链社区运营。掌握核心运营理念与技巧!工业区块链(DIPNET࿰…...

区块链社区先导者Bitwork正式宣布落户香港
点击上方“蓝色字”可关注我们!编辑:铅笔盒2018年,区块链技术和概念在全球各个领域得到快速发展和普及,众多区块链企业及爱好者如雨后春笋般涌现出来的同时,优质的区块链项目不能得到快速普及、区块链技术支援不足、市…...

区块链社区建设难:难在项目自身,也难在社区载体 |链捕手
社区对区块链项目乃至于整个区块链行业的重要性已经形成了基本的行业共识,几乎每个项目方都在想尽办法营造社区、激发社区活力。比特币、以太坊等极少数项目在社区建设方面成绩亮眼,但绝大多数区块链项目在社区建设方面表现糟糕。链捕手(ID&a…...

HiBlock区块链社区:链接全球区块链开发者
HiBlock区块链社区秉承开放、协作、透明、链接、分享的价值观,致力打造一个专注于区块链的开发者社区,我们不仅在开发者中宣传推广区块链,还会帮助开发者真正掌握区块链技术和应用。 点击阅读原文查看官网 阅读原文...

区块链社区:区块链从业者知音社区,分享社区精准流量粉丝资源
来拓客社区的起步定位,直指高维度的【连接区块链从业者】,就是要告诉大家,我们不止是在做社区培训,我们还是在搭建生态。来拓客秉持一如既往不画饼只求实的做事风格,在区块链领域深入研究多年,集项目、品牌…...

如何做好区块链社区?得社区者得天下
自2009年比特币创世块出现后,区块链的概念便开始在全球蔓延。 近年来,区块链热度持续升温,2018年是区块链技术发展的关键年,区块链技术得到了越来越多的关注和认可。 在区块链圈流行着这样一句话:“得社区者得天下”…...

区块链社区
区块链中文网https://bitshuo.com/ 转载于:https://www.cnblogs.com/xiaocongcong888/p/9534192.html...

[Camunda BPMN进阶] 电商订单流程设计与调试
目录 摘要 基于BPMN的软件设计思想 电商订单流程业务场景 基本订单流程BPMN设计 1.最基本流程设计 2. 添加超时未付款自动取消功能 3. 添加15分钟付款提醒 4. 添加用户取消订单事件 进阶订单流程BPMN设计 1. 使用并行网关执行任务 2. 将具有相同事件分支的任务合并…...

jpg转矢量图 python_Pygal,可导出矢量图的Python可视化利器
Python有很多优秀的可视化库,其中有名的像matplotlib、seaborn、plotly,可以绘制出各式绚丽的图表。这次介绍一个不那么广为人知但依然优秀的可视化库-Pygal官网介绍说Pygal是一个性感的Python制表工具,提供了14种图表类型,可以轻…...

图片怎么转为html5,将图片转化为矢量并canvas化的容易工具(基于Node.js + HTML5 canvas)...
将图片转化为矢量并canvas化的简单工具(基于Node.js HTML5 canvas)一、前言最近需要做一个图标的矢量化,但是没有数据,因此采用了node.js作为数据处理工具,canvas绘制图标;结果发现使用canvas绘制的图标比之前少了近10几k(原20K,…...

U盘安装linux7 ,提示you might want to save找不到路径
进入提示页面: dracut:/# cd /dev dracut:/# ls 这样子你就会看到所有的设备信息。找到sdbx,x为一个数字,是你u盘所在,比如我用的是sdb4。 dracut:/# reboot 重启。 在install页面按e键。我的是按Tab键。 修改vmlinuz initrdinitrd.img inst.…...

Unity-存档与读档
1. PlayerPrefs。 采用键值对的方式对数据进行存储。 PlayerPrefs.SetInt("Index",1); // 可以存储Int, Float, String类型的数据。 PlayerPrefs.SetFloat("Height",183.5f); PlayerPrefs.SetString("Name","Tom"); // 查看数据是…...

读书笔记:SAFNet
文献:通过 Siamese Adaptive Fusion Network 进行合成孔径雷达图像变化检测 论文 摘要:合成孔径雷达(SAR)图像变化检测是遥感图像分析领域中一项关键而具有挑战性的任务。由于以下挑战,这项任务并非易事:首…...

tensorflow模型的save与restore,以及checkpoint中读取变量
创建一个NN import tensorflow as tf import numpy as np #fake data x np.linspace(-1, 1, 100)[:, np.newaxis] #shape(100,1) noise np.random.normal(0, 0.1, sizex.shape) y np.power(x, 2) noise #shape(100,1) noise tf_x tf.placeholder(tf.float32, x.sha…...

ABAP:Read_Text(SAVE_TEXT)函数的使用方法(转)
在SAP系统中,有时候会有大段文本内容需要保存,例如:销售发货(VL03N),在单据的概览中 ,有一个[文本]项,在此处可以填写单据的大段文本描述,那么该内…...

sparksql语法,读parquet,load,save
[hadoopnode1 spark-1.5.2-bin-hadoop2.6]$ cd examples/src/main/resources/ [hadoopnode1 resources]$ file users.parquet users.parquet: Par archive data [hadoopnode1 resources]$ strings users.parquet|more PAR1 Alyssa example.avro.User name% favorite_color% fa...

小白python疑难|Source Must be saved OK to save?
1.出现错误:python 总是显示Source Must be saved OK to save?,无法保存代码文件 responses {}# 设置一个标志,指出调查是否继续 polling_active Truewhile polling_active:# 提示输入被调查者的名字和回答name raw_input(&quo…...

hibernate调用save方法,不update而是create一条新纪录
今天,在调用hibernate的save方法遇到一件奇怪的事:使用load方法从数据库中读取出一个对象,然后更新这个对象的一个字段,再重新save回数据库,按道理,hibernate会更新数据库中的记录,而不是新建一…...

matplotlib animation动画保存(save函数)详解
本文主要介绍matplotlib中animation如何保存动画,从matplotlib的一些基础代码说起,并在最后附上了解决save()函数报错的代码,其中的一些代码涉及到__getitem__()方法和注解修饰的知识,如果没有了解的朋友希望先去查一下相关的知识…...

存档和读档
游戏中往往需要存档和读档,进行游戏的保存和读取,游戏的存档和读档其实就是对象的序列化和反序列化。如果游戏中需要存储的类是Save,那么有三种方式进行存档和读档。 //数据类 [System.Serializable] public class Save {public List<int…...

Easy Save3游戏存档安全分析
一、简介 在Unity3d商店中看到一款存档读档的插件,下载量挺大的,找了个试用版本的玩了下,使用确实挺方便。而且支持不止对数据对存储,包括类对象、资源文件等。 二、简单的测试使用 简单的直接存储一个整型: ES3.…...

save_path is not a valid checkpoint
save_path is not a valid checkpoint 这句代码还是获取模型的字符串路径: aaa tf.train.latest_checkpoint(model_path)自己写对了,就不需要。 model_path结尾到文件名,.data前面的部分,加载预训练: tf.train.Save…...

mongoDB之update和save操作
mongoDB更新文档,通过update和save方法进行文档更新操作; update()方法 …...

pytorch保存图片 save_image ,读取图片
保存图片主要使用save_image,定义如下: torchvision.utils.save_image(tensor, filename, nrow8, padding2, normalizeFalse, rangeNone, scale_eachFalse) 注意:normalizeFalse代表只能将(0,1)的图片存储…...

tensorflow save_model模块
使用tensorflow save_model模块读取deepfm的W,V等参数,找了很多例子,都是读input,output,看到这篇讲的还算比较清楚:https://stackabuse.com/tensorflow-save-and-restore-models/?spma2c4e.11153940.blogcont228618.…...

matlab load save
最近在处理数据,所以常用到这两个函数load是把你要读取的数据读进这个code中,load之后数据会出现在工作区 我的一般做法是把我要load的数据所在的完整路径放在load中,即load(完整路径)。 这样做的好处有三个,一是我不需要把数据和…...

redis.conf之save配置项解读
配置示例: save 900 1 save 300 10 save 60 3600 配置解读: 1) “save 900 1”表示如果900秒内至少1个key发生变化(新增、修改和删除),则重写rdb文件; 2) “save 300 10”表示如果每300秒内至少10个key发…...

ChIP-seq 分析:原始数据质控(2)
1. ChIPseq 简介 染色质免疫沉淀,然后进行深度测序 (ChIPseq) 是一种成熟的技术,可以在全基因组范围内识别转录因子结合位点和表观遗传标记。 ChIPseq1.1. 实验处理 ChIPseq2交联和蛋白质结合的 DNA。通过抗体富集特定蛋白质或 DNA 。添加 末端修复、A 尾…...

对几万行数据的调优操作,调优后系统性能提升明显
文章目录 前言一、问题一:对几万条数据筛选二、问题二:对几万条数据增删查改总结前言 对几万行的数据的处理或者对几万行数据与数据库的交互操作,虽然严格意义上来说,并不是很多,但是如果按照传统普通的流程一次性的遍历处理操作数据,也是会性能很差,有可能到分钟级别;…...

索尼官方答疑,你关心的PS VR2问题都在这里
随着索尼PS VR2即将开售,索尼在近期也逐渐公布更多关于PS VR2的消息,包括首发阵容(2-3月期间)共计37款。与此同时,外界对于索尼PS VR2提出了更多担心,彭博社爆料称:因PS VR2的预订量未及预期&am…...

SSM企业权限管理项目(一)
AdminLTE AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具,它提供了一系列响应的、 可重复使用的组件,并内置了多个模板页面;同时自适应多种屏幕分辨率,兼容PC和移动端后台模板框架github获取AdminLTE源码&#…...

C++设计模式(10)——原型模式
亦称: 克隆、Clone、Prototype 意图 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 问题 如果你有一个对象, 并希望生成与其完全相同的一个复制品, 你该如何实现呢&…...

uniCloud 云函数/云对象 node版本改变成12或18解决方案
爆红信息 right-hand side of instanceof is not an object 今天卡到一个本地跑好好的云对象部署云端直接报错了。 原因是这样的!! 1、你去看看你云函数依赖那npm install的插件node版本是不是有要求,博主开github看了尽然是node>12 2、…...

面对元宇宙算力瓶颈,AI算力专家宁畅开出三大秘方
文 | 智能相对论作者 | 沈浪元宇宙这把火,从2022继续烧到了2023。目前来看,资本市场对扎克伯格的元宇宙故事依旧抱以希望。2月1日美股收盘,Meta涨2.79%,报收153.12美元/股,盘后股价一度涨逾19%,市值暴涨将近…...

(考研湖科大教书匠计算机网络)第三章数据链路层-第七节:MAC地址、IP地址和ARP协议
pdf下载:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:MAC地址(1)概述(2)IEEE 802局域网的MAC地址A:地址格式B:地址表示方法C&…...

LeetCode刷题模版:273 - 275、278 - 279、283 - 284、287、289 - 290
目录 简介273. 整数转换英文表示【未理解】274. H 指数275. H 指数 II278. 第一个错误的版本279. 完全平方数283. 移动零284. 顶端迭代器287. 寻找重复数289. 生命游戏290. 单词规律结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕ…...

HDFS基本命令
目录 1.上传文件到HDFS文件系统 2.查看HDFS文件系统中的文件 3.查看上传到HDFS文件系统中指定文件的内容 4.从HDFS文件系统下载指定文件,并存放在指定文件中 5.删除HDFS文件系统中的指定文件 6.创建目录 7.创建多级目录 8.递归删除目录下的所有文件 9.删除…...

Java中if结构语句有几种格式?怎样执行?
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执 行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。流程控制类语句包括顺序、分支、循环三个结构语句。下面就来了…...

百趣代谢组学分享:基于大规模多中心人群的肝癌血清标志物研究
为什么都是多组学发的高分文章,我只想做代谢组学可以发高分吗? 答案当然是 Yes。接下来Lavender就为大家分享由大连物化所许国旺老师课题组发表在HEPATOLOGY上面的一篇文章。 百趣代谢组学文献分享,文章的题目为:A Large-Scale,…...

java面试题(十四)数据库之sql
开启掘金成长之旅!这是我参与「掘金日新计划 2 月更文挑战」的第 N 天,点击查看活动详情 1.1 介绍一下数据库分页 参考答案 MySQL的分页语法: 在MySQL中,SELECT语句默认返回所有匹配的行,它们可能是指定表中的每个…...

Java顺序表模拟实现 + ArrayList介绍
文章目录前言一、模拟实现顺序表成员属性成员方法1,构造方法2,add——新增元素,默认在数组末尾新增2.1, isFull——判断顺序表是否已满2.2, expandCapacity——扩容3,add——在 pos 位置新增元素3.1&#x…...

html+css网页练习四
文章目录一、购物网站页面1、要求2、效果图3、index.html4、style.css二、活动页面1、要求2、效果图3、index.html4、style.css三、电商网站页面1、要求2、效果图3、index.html4、style.css四、搜索引擎页面1、要求2、效果图3、index.html3.1、index1.html3.2、index2.html4、s…...

行云洞见|为何行业权威都预测“云原生IDE 将成为常态”?
原文:《The year of the Cloud Development Environment 》 作者:RedMonk创始人 James Governor 最近CNCF在2023年云原生预测中谈到“云原生IDE 成为常态”,让CloudIDE又成为了云原生的焦点,市场上对CloudIDE的态度以及发展趋势讨…...

Fluke ADPT连接器给福禄克万用表插上翅膀
所需设备: 1、Fluke ADPT连接器; 2、Fluke 15B / 17B / 18B 简介 Fluke ADPT连接器允许个人计算机通过串行口与福禄克万用表进行通信。 计算机PC程序通过图形界面来输入数据和命令,与福禄克万用表进行交互。 Fluke ADPT连接器是一款先…...

VUE 年份范围选择器
VUE 年份范围选择器遇到一个需求,需要写一个年份选择器,是范围的年份选择器,比如:xxx年到xxx年 在使用elment UI的时候发现没有这种功能,于是采用el-date-picker 的年份选择器自己后封装了一个年份范围选择器 由于组件使用的地方很多,所以格式化都在组件中处理,回传格式在回传的…...

工业以太网交换机功能测试标准和方法
一、 数据帧过滤:测试被测设备数据帧过滤功能。 a) 测试步骤:1) 按图1搭建测试环境;2) 网络测试仪测试口1向测试口2和测试口3线速发送数据帧;3) 记录网络测试仪测试口2和测试口3数据接收情况;4) 在被测设备上配置端口2…...

Prometheus监控Elasticsearch
1 下载elasticsearch exporterhttps://github.com/prometheus-community/elasticsearch_exporter2 systemd 管理elasticsearch exporter service文件: /usr/lib/systemd/system/es_exporter.service[Unit] Descriptiones_exporter Documentationhttps://prometheus.io Afterne…...

Linux C 中数组名和结构体变量名代表的含义
在linux c 中数组和结构体是常见的数据结构类型,那么他们的标号名称 有代表神魔呢? 比如: int a, a 代表的是一个变量名程,它对应的地址中(&a)存的是一个整形值, 那么 char buf…...

如何控制Facebook投放广告成本?
一,Facebook广告成本高的原因和常见问题广告的成本很高,因为我们需要扩张正如前几篇文章所说,我们所要做的就是扩大对表现良好的产品和广告的广告。有两种扩展方式:这个过程也是我们的AD优化测试的一部分。因为在扩大规模的过程中…...

LeetCode——1604. 警告一小时内使用相同员工卡大于等于三次的人
一、题目 力扣公司的员工都使用员工卡来开办公室的门。每当一个员工使用一次他的员工卡,安保系统会记录下员工的名字和使用时间。如果一个员工在一小时时间内使用员工卡的次数大于等于三次,这个系统会自动发布一个 警告 。 给你字符串数组 keyName 和 …...

NLP之相似文本搜索
NLP之相似文本搜索相似文本搜索介绍应用场景常见算法1.text2vec流程代码2.gensim流程代码相似文本搜索 介绍 相似文本搜索是一种特殊的文本搜索,它的目的是找到与指定文本最相似的文档。这种技术通常通过计算文本间的相似度来实现,相似度可以通过各种方…...

python数据可视化开发(4):爬取对应地址的pdf文档并分类保存到本地文件夹(爬虫)
系列文章目录 python开发低代码数据可视化大屏:pandas.read_excel读取表格python实现直接读取excle数据实现的百度地图标注python数据可视化开发(1):Matplotlib库基础知识python数据可视化开发(2):pandas读取Excel的数据格式处理python数据可…...

Nginx是什么?有哪些优点?
Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一提的是…...

matplotlib在一张图上绘制包含多条折线的多个子图
matplotlib在一张图上绘制包含多条折线的多个子图问题描述解决办法问题描述 实验用了多个数据集,并且用了多种对比实验的方法,想把结果展示在一张图上,就需要在一个图上画多个折线图,并且需要在一张大图上绘制多个小图。 解决办…...

【LeetCode每日一题】【2023/2/7】1604. 警告一小时内使用相同员工卡大于等于三次的人
文章目录1604. 警告一小时内使用相同员工卡大于等于三次的人方法1:哈希表1604. 警告一小时内使用相同员工卡大于等于三次的人 LeetCode: 1604. 警告一小时内使用相同员工卡大于等于三次的人 中等\color{#FFB800}{中等}中等 力扣公司的员工都使用员工卡来开办公室的…...

Arbitrum上首个跨链互操应用开启空投计划!
2月6日消息,波卡生态跨链互操作应用Avault 全链产品正式上线。据悉,该版本代码经由派盾完成审计,并在本周一正式支持Arbitrum网络。这标志着Avault从波卡生态出发,正式升级为区块链世界中第一个严格意义上的一站式跨链收益平台。 …...

浅学persistent
文章目录1. 背景2. 开机自启动流程3. adb kill -9 杀进程后会自动重启4. 小结1. 背景 在应用AndroidManifest文件下添加 android:persistent“true” 关键字,并把Apk预置到system/app目录下,可以给应用实现开机自启动和保活效果。 从以下两个疑问去找答…...

LeetCode题解 动态规划(二):62 不同路径;63 不同路径II
62 不同路径 medium 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&a…...

Flowable涉及的表介绍
文章目录一、ACT_RE_1、介绍2、表1、act_re_model(流程模型)2、act_re_deployment(部署单元信息)3、act_re_procdef(已部署的流程定义,部署时加载的xml信息)二、ACT_RU_1、介绍2、表1、act_ru_e…...

CompletableFuture的使用
文章目录1、Future2、CompletableFuture并行,并发 并发:一个实体上,多个任务有序执行 并行:多个实体上,多个任务同时执行 用户线程 用户线程是系统的工作线程,会完成程序需要完成的业务操作 守护线程 是一…...

【JavaSE】fail-fast与fail-safe源码分析
文章目录1. fail-fast与fail-safe概述2. fail-fast源码分析3. fail-safe源码分析4. 总结1. fail-fast与fail-safe概述 快速失败(fail-fast),快速失败是Java集合的一种错误检测机制。 出现场景:线程A在使用迭代器遍历一个集合对象的时候,线程…...

LeetCode-127-单词接龙
1、虚拟节点广度优先搜索 为了获得最短转化序列中的单词数目,我们可以假设每个单词是一个节点,可以互相转化的节点之间存在边,这样我们就能将最短转化序列问题转化为图的广度优先搜索问题。考虑到图中可能存在环,因此我们需要额外…...

【pytorch】图片分类问题处理一般数据集,使其满足torchvision.datasets.ImageFolder调用结构
torchvision.datasets.ImageFolder调用结构: 对于简单的图像分类任务,并不需要自己定义一个 Dataset类,可以直接调用 torchvision.datasets.ImageFolder 返回训练数据与标签。 数据集应满足pytorch的格式要求,即将数据集分割为训…...

利用泰克示波器MSO56完成LED行业的测试
1、 测试需求背景LED 是英文 Light Emitting Diode 的简称,是一种具有两个电极的半导体发光器件,让其流过小量电流就会发出可见光。LED的电性能测试特点与其实与开关电源的电性能测试基本相同,但更加侧重电流测试,因为LED是由开关…...

分享106个JS选项卡,总有一款适合您
分享106个JS选项卡,总有一款适合您 106个JS选项卡下载链接:https://pan.baidu.com/s/1kdRJvTgcuZe_TpzrcnmQDQ?pwd0k2d 提取码:0k2d Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj css手风琴效果选项卡 jQ…...

2023年,想要年赚百万必懂的道理?
1.一个人只有经历过风雨沧桑,才会明白一个道理:“这个世界最大的监狱就是人的思维,而越狱最好的方式就是人的觉醒。” 2.人活明白了就会知道,不要拿自己去跟别人比较,后果不是忘记了自己,就是让自己失落。…...

ANTLR4入门学习(三)
ANTLR4入门学习(三)一、ANTLR快速指南1.1 匹配算数表达式的语言1.2 java测试代码1.3 增加通用模块1.4 使用访问者模式实现计算器1.5 实现带有清除内存的计算器功能1.6 使用监听器构建一个翻译程序(暂无)二、定制语法分析过程2.1 在…...

Windows 11数据备份软件怎么选?
Windows 11 有数据备份软件吗? 备份和还原(Windows 7)以及 Windows 10 中的文件历史记录也保留在 Windows 11 中。因此你可以使用它来备份你的用户文件。但是,仅限于此。备份和还原 (Windows 7) 允许你在 Windows 11 中选择其他文…...

第三章.神经网络的学习—损失函数
第三章.神经网络的学习 3.1 损失函数 损失函数是表示神经网络性能“恶劣程度”的指标,即当前神经网络对监督数据在多大程度上不拟合,在多大程度上不一致。 1.均方误差(mean_squared_error) 1).公式: 参数说明: yk:神经…...

10 个最适合开发人员的 GitHub 代码库 ✅
在 GitHub 的帮助下,开发人员可以轻松访问并与他人共享他们的代码。它已成为开发人员在项目上进行协作并了解最新开发趋势的重要工具。对于开发人员而言,GitHub 是寻找最佳存储库以帮助他们完成开发项目的宝贵资源。有这么多可用的存储库,可能…...

C++多态的一些记录
文章目录俩概念例子多态要满足如何实现纯虚函数和抽象类几个黑马的例子虚析构和纯虚析构俩概念 首先记住俩概念,地址的早绑定和晚绑定 静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确定函数地址 (我的理解&a…...

JVM笔记(6)—— JVM运行时问题案例
案例一:CPU占用过多 问题场景:服务器告警CPU占用过高 排查: 用top命令查看哪个进程对cpu的占用过高,获取进程id。可以看到PID为32655的进程此时占用了99.2%的CPU 根据进程id用ps命令进一步定位是哪个线程引起的cpu占用过高&am…...

【单细胞高级绘图】06.feature展示
这个图是前两天刚画的。箱型图、散点图、小提琴图组合在一起,档次瞬间上去了。 最近修稿过程中,审稿人提了一个建议,说是在某一张小提琴图上添加点,可以更好反映数据的分布。我理解他的意思,大概就是: 左图…...

SVN记录
如何查看自己电脑是否已经安装过SVN打开终端,敲入如下命令:svn -version如果有已经安装了svn,那么终端控制台将出现如下信息:svn: invalid option character: eTypesvn help for usage.如果出现如下,则说明当前系统没有…...

Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理
Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理 目录 Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、简单实现步骤 五、关…...

故障分析 | Redis AOF 重写源码分析
作者:朱鹏举 新人 DBA ,会点 MySQL ,Redis ,Oracle ,在知识的海洋中挣扎,活下来就算成功… 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请…...

【YBT2023寒假Day6 B】树的计数(贪心)(DP)(拉格朗日插值)
树的计数 题目链接:YBT2023寒假Day6 B 题目大意 定义无标号树的大小是节点个数,权值是最大独立集大小,树的儿子有序,然后给你 n,要你求对于每个 i1~n,j0~n,大小是 i 权值是 j 的不同树的数量…...

动手深度学习笔记(四十四)8. 循环神经网络
动手深度学习笔记(四十四)8. 循环神经网络 8. 循环神经网络8. 循环神经网络 到目前为止,我们遇到过两种类型的数据:表格数据和图像数据。 对于图像数据,我们设计了专门的卷积神经网络架构来为这类特殊的数据结构建模。 换句话说,如果我们拥有一张图像,我们需要有效地利…...

十种“软件滤波“程序,以及特点
1、限副滤波 /* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */ #define A 10 char value; char filter() { char new_value; new_value get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A …...

NLP发展关键模型
文章目录NLP中Bert的进展历史word embeddingELMOGPTBertNLP中Bert的进展历史 从Word Embedding到Bert模型——自然语言处理中的预训练技术发展史 word embedding word embedding:每个单词one-hot编码的向量矩阵,在大语言训练之后,该矩阵可以直接提取出…...

数学,千万别学过火
从网上看到有一本书叫《千万别恨数学》的书,是《千万别学英语》的姊妹篇。作者是韩国尖端技术研究院的博士。他以前对数学反感之极,大学的时候为了赚生活费,开始做家教,辅导高中学生学数学。因为读书的时间长,这种日子…...

leetcode栈和队列系列总结
这一部分其实就是关于这两个结构的特性,栈是先入后出,队列是先入先出; 大部分时候还是用数组和切片来实现的,go中有一个list,可以pushback等,但是主要在二叉树章节会用到,这里不怎么用 20 有效…...

第12章 MongoDB 删除集合教程
第12章 MongoDB 删除集合教程 本章节咱们为大家介绍如何使用 MongoDB 来删除集合。 MongoDB 中使用 drop() 方法来删除集合。 语法格式: db.collection.drop()参数说明: 无 return 值 如果成功删除选定集合,则 drop() 方法return true&…...

【面试题】对象、原型、原型链与继承 ,你了解多少?
前言原型、原型链、类与继承似乎无时无刻的出现在我们身边,无论你是在面试中亦或是平常学习和工作中都有它的身影。那么这个是又是什么东西呢 ? 我曾通过 avaScript高级程序设计、你不知道的JavaScript、MDN文档以及教学视频。但似乎仍是半知半解,但我依然相信能通过这篇文章能…...

js如何实现继承
1,原型链继承 让构造函数的原型(prototype)是另一个类型的实例,那么该构造函数new出来的实例就具有该实例的属性;缺点,每一个对象实例共享所有的继承和方法,无法向父类传参 function father&a…...

【动态规划】01背包问题(手画图解)
经典dp动规问题,01背包问题关键在于遍历顺序与初始化这两步的推导。 目录 文章目录 一、01背包问题 二、确定dp数组及其下标含义 三、确定递推公式 四、确定初始化 五、确定遍历顺序 六、举例推导dp数组 总结 一、01背包问题 有n件物品,每件的价值…...

JS 闭包
JS 闭包 一、如何产生闭包? 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包; 二、闭包到底是什么? 理解一:闭…...