A Neural Representation of Sketch Drawings

A Neural Representation of Sketch Drawings 以向量形式,生成连贯的涂鸦(低分辨率的)。 想法 以人的思维方式进行生成,具体是模拟控笔的动作:移动方向,提笔,结束绘画 什么是:unconditional and conditional generation of vector images composed of a sequence of lines. 数据 dataset 为笔画动作,每个点由5个元素表示,分别是偏移和状态,其中偏移是相对于上一个点的偏移,状态则包含:笔尖触纸、抬笔、结束绘画 方法 经过双向RNN 生成h,经过全连接层投影到$ \mu $和 $\sigma$,使用ex使得$\sigma$非负,再进行$z = \mu + \sigma \odot \mathcal{N}(0, I)$,其中$ \sigma \odot \mathcal{N}(0, I)$,是生成一个符合高斯分布的噪声,并使用$\sigma$进行放缩 为何这样做: Encoder 神经网络输出 $\mu$ 和 $\sigma$ 2,实际上是在告诉系统:“我认为这张草图在潜在空间里的位置大概在这里($\mu$),但我不太确定,允许的误差范围大概是这么大($\sigma$)。 z经过tanh ($[ h0 ; c0 ] = \tanh(W_z z + b_z)$)得到初始状态向量h0,c0,其中前者是初始隐藏状态,代表短期记忆或输出状态,后者是初始细胞状态(LSTM 特有的),代表长期记忆初始细胞状态(LSTM 特有的),代表长期记忆 hi的计算方法: 根据 $h_0$(零状态)和 $S_0$ 计算出 $h_1$。 ...

December 1, 2025 · 5 min · 965 words · Bob

KNN & 聚类

KNN(k-Nearest Neighbours) KNN,是一种分类算法,无需训练,通过 输入数据点与训练集中距离其最近的k个数据点 的类别来判断当前数据点的类别;其中训练集数据被直接存储下来。 3种距离尺度 class kNN(): '''k-Nearest Neighbours''' # Initialise def __init__(self, k=3, metric='euclidean', p=None): self.k = k self.metric = metric self.p = p # Euclidean distance (l2 norm) def euclidean(self, v1, v2): return np.sqrt(np.sum((v1-v2)**2)) # Manhattan distance (l1 norm) def manhattan(self, v1, v2): return np.sum(np.abs(v1-v2)) # Minkowski distance (lp norm) def minkowski(self, v1, v2, p=2): return np.sum(np.abs(v1-v2)**p)**(1/p) # kNN 算法没有传统的“训练”阶段来学习模型参数。 # fit 方法只是简单地存储训练数据集 X_train(特征)和 y_train(标签),以便在预测时使用。 # Store train set def fit(self, X_train, y_train): self.X_train = X_train self.y_train = y_train # Make predictions def predict(self, X_test): preds = [] # Loop over rows in test set for test_row in X_test: nearest_neighbours = self.get_neighbours(test_row) majority = stats.mode(nearest_neighbours)[0][0]#返回一个出现最频繁的元素, preds.append(majority) return np.array(preds) # Get nearest neighbours def get_neighbours(self, test_row): distances = list() # Calculate distance to all points in X_train for (train_row, train_class) in zip(self.X_train, self.y_train): if self.metric=='euclidean': dist = self.euclidean(train_row, test_row) elif self.metric=='manhattan': dist = self.manhattan(train_row, test_row) elif self.metric=='minkowski': dist = self.minkowski(train_row, test_row, self.p) else: raise NameError('Supported metrics are euclidean, manhattan and minkowski') distances.append((dist, train_class)) # Sort distances distances.sort(key=lambda x: x[0]) # Identify k nearest neighbours neighbours = list() for i in range(self.k): neighbours.append(distances[i][1]) return neighbours k-Means 通过选择k个中心点,进行聚类。具体实施:初始化k个中心点(它们之间的距离尽可能的远),根据这些点进行聚类(遍历每一个数据样本 $x_i$,计算它到 $k$ 个中心点的距离,把它归类到距离最近的那个中心点所在的簇(Cluster)),分别根据簇中所有点的坐标(求平均)计算得到新的中心点,再次聚类,再次计算新的中心点,直到中心点不再更新或者中心点变化极小(小于我们设定的阈值) ...

November 24, 2025 · 3 min · 497 words · Bob

NLP基础

NLP的核心任务:understanding and synthesizing NLP输入预处理 Tokenization Case folding 将输入统一大小写,以减少内存,提高效率 ,but可能创造歧义,so具体问题具体分析 For example "Green" (name) has a different meaning to "green" (colour) but both would get the same token if case folding is applied. Stop word removal 移除一些含义较少的词,同样提高效率,but可能造成语义不完整,具体问题具体分析 Examples include, "a", "the", "of", "an", "this","that".For some tasks like topic modelling (identifying topics in text), contextual information is not as important compared to a task like sentiment analysis where the stop word "not" can change the sentiment completely. ...

November 21, 2025 · 2 min · 221 words · Bob

Transformer

1. 理论 输入 embedding words turning each input word into a vector using an embedding algorithm. 问题:The size of this list is hyperparameter we can set – basically it would be the length of the longest sentence in our training dataset. 最底层的编码器输入是 embedding words,其后都是其他编码器的输出 In the bottom encoder that would be the word embeddings, but in other encoders, it would be the output of the encoder that’s directly below BERT实践中也提到了这个,可以查看下 ...

November 20, 2025 · 8 min · 1690 words · Bob

AGG16 & Unet

VGG16 结构 使用TensorFlows实现 def VGG16(input_shape=(224,224,3)): model = keras.Sequential([ keras.Input(shape=input_shape), layers.Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), #这里不same,则尺寸减半 layers.Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Flatten(),#展平 layers.Dense(units=4096, activation='relu'), layers.Dense(units=4096, activation='relu'), layers.Dense(units=4096, activation='softmax') ]) model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'] ) return model 在猫、狗二分类数据集上进行训练,测试,这里我们使用的是内置的预训练好的VGG16,进行微调即可 我们去掉了预训练的输出层(3个全连接层) 原vgg16 处理后的vgg16 # 设置测试集,训练集目录 test_dir="../input/dogs-cats-images/dog vs cat/dataset/test_set"train_dir="../input/dogs-cats-images/dog vs cat/dataset/training_set" train_dir_cats = train_dir + '/cats' train_dir_dogs = train_dir + '/dogs' test_dir_cats = test_dir + '/cats' test_dir_dogs = test_dir + '/dogs' # Preview first few images展示前6张图片 preview_cats = ["/cat.1.jpg", "/cat.10.jpg", "/cat.100.jpg", "/cat.1000.jpg", "/cat.1001.jpg", "/cat.1002.jpg"] preview_dogs = ["/dog.1.jpg", "/dog.10.jpg", "/dog.100.jpg", "/dog.1000.jpg", "/dog.1001.jpg", "/dog.1002.jpg"] print('Cats') plt.figure(figsize=(10,8)) #10,8 英寸 for i in range(6): im_cat = load_img(train_dir_cats + preview_cats[i]) plt.subplot(2, 3, i+1) #展示几行 每行展示几列 i+1 为图所在的子网格位置 plt.imshow(im_cat) plt.axis('off') plt.show() print('Dogs') plt.figure(figsize=(10,8)) for i in range(6): im_dog = load_img(train_dir_dogs + preview_dogs[i]) ax = plt.subplot(1, 6, i+1) plt.imshow(im_dog) plt.axis('off')#关闭当前子图的坐标轴、刻度和标签 plt.show() 数据加载: ImageDataGenerator 配合 flow_from_directory 方法,自动完成了将 ‘Cat’ 和 ‘Dog’ 文件夹名称转换为数字标签 0 和 1 的过程。 ...

November 20, 2025 · 3 min · 610 words · Bob

医学WSL病灶检测与语义分割

基础概念 弱监督:告知有,而不告知其位置 强监督:精确的告知其位置,明确有 MIL(多实例学习): Bag & Instance,其中前者是整张WSL,后者是切分出来的patch,若patch中有一张是不正常的,则整张WSL都是不正常的 这种MIL的问题在于,若用于病灶检测,可能无法检测出所有病灶,因为检测到一些病灶时就足以判断WSL是不正常的了。 方法: 传统方法:CAM/MIL 新方法:SAM 上手路径:

November 19, 2025 · 1 min · 12 words · Bob

LeNet-5 & AlexNet

主要介绍LeNet 与 AlexNet,还 涉及到dropout, maxpooling, relu等概念 In this notebook we will motivate and implement from scratch two Convolutional Neural Networks (CNNs) that had big impacts on the field of Deep Learning. Namely, we will look at LeNet-5 (Yann LeCunn et al., 1989), which is considered one of the first CNNs ever and also AlexNet (Alex Krizhevsky et al., 2012), which won the 2012 ImageNet competition by an impressive marging and introduced many techniques that are considered state of the art even today (e.g. dropout, maxpooling, relu, etc). ...

November 16, 2025 · 7 min · 1353 words · Bob

ML-逻辑回归

输入x希望输出y=1的可能性最大 通过sigmod输出映射到0,1,其中0.5为分界线 逻辑回归,使用sigmod为激活函数的神经网络 Evaluating the cost function can be thought of as forward propagation and computing derivatives can be thought of as backpropagation. sigmod中权重越高,越自信,就是轻微的输入变化带来截然不同的结果 偏差的不同呢是的决策边界发生变化,就是说分界点改变了。 least squares不再适用(回归函数经过sigmoid,不再是Convex functions,即凸函数) Convex functions have the useful property that any local minimum is also a global minimum 第一幅为Convex functions,第二幅为非 Convex functions,后者的局部最小值不一定是全局最小值 logistic regression 使用 cross-entropy loss,这是它的凸函数 横轴预测值,竖轴损失:预测错误损失趋向无穷,预测正确损失为0 由最大似然 推出 交叉熵损失, 最大似然,思想是通过选择模型参数,使得 观测到的数据出现的概率最大。 ...

November 14, 2025 · 4 min · 682 words · Bob

Knowledge Graph & NLP Tutorial-(BERT,spaCy,NLTK)

NLP处理阶段 词法:切分为token uneasy” can be broken into two sub-word tokens as “un-easy”. 句法:1.检查句子结构有问题与否;2.形成一个能够体现词间句法关系的结果 eg: “The school goes to the boy” 语义:语义是否正确 semantic analyzer would reject a sentence like “Hot ice-cream” Pragmatic :歧义,中选择一个意思 知识图谱 存储提取的信息的一种方式。存储结构一般包括:a subject, a predicate and an object(主谓宾) 这些技术用于构建知识图谱 sentence segmentation, dependency parsing, parts of speech tagging, and entity recognition. 抽取实体 从句子中抽取主语和宾语,需要特殊处理的是复合名称和修饰词。 抽取关系 从句子中提取“主要的”动词 完成此二者之后便可进行知识图谱的构建,构建时最好将每个关系单独构建一个图谱,这是为了更好可视化。 BERT 适用于少数据集,question answering and sentiment analysis 任务 ...

November 10, 2025 · 2 min · 409 words · Bob

语义分割

图片基础 一个图片通常表现为3维矩阵,长、宽、通道,其中长*宽构成了分辨率,而有多少个通道就相当于有多少个"调色板"页面,这些调色板共同构成了每个像素点的色彩。 eg:1080p的rgb图片,就是1920*1080,通道数为3,其中rgb分别可取(0-255);而单通道就是灰度图像,取值(0-255) CNN CNN【卷积 → 激活 → 池化】 视为一个基础块,其中卷积层的每一个卷积核(滤波器)都可以提取一个特征,而激活层的Re-LU可以将卷积后此特征不明显的值设为0,再经过池化层,保留更为显著的特征(从“精确位置”到“空间存在”)。 随着多层的卷积输出,通道数增加,长、宽降低,而通道意义也变为了不同特征的强弱分布,有多少种通道就对应着多少种特征; 池化操作减少特征图中 参数数量、保留显著特征,只描述哪一个区域有,而不用具体到点。 经过一些列的卷积、激活、池化操作,最终得到长、宽小,而通道数大的特征图 ,经过全连接,输出一个1*n的向量,其中n为分类的数量。 卷积操作 整个卷积层的输出是N张特征图堆叠在一起,形成一个新的三维张量。 输出形状: [新高度, 新宽度, 卷积核数量] 例如: [222, 222, 32] (使用了32个3x3卷积核,尺寸略有缩小)。 此时,张量发生了变化:通道数从原始的3(R,G,B)变成了32,这32个通道不再是颜色,而是32种不同的基础特征的强度分布图。 整体流程 CNN演变 这里我的描述的网络是去掉了全连接层的CNN FCN FCN做出的重要改变是将CNN中全连接换为解码器,保留了原有CNN中的编码器(卷积+池化),这样,原有的CNN用于分类的一维输出,就变为了 “一个高分辨率的、与输入尺寸对应的像素级分类图”。 跳跃连接 编码器中,越浅的层次,图片分辨率更高位置更精细,越深的层次,图片的分辨率更低,but语义信息丰富(知道“这是什么”,但不知道在哪) 在ResNet中的应用 flowchart TD subgraph A [编码器 - 卷积与下采样] direction TB A1[输入图像<br>HxWx3] --> A2[卷积与池化<br>H/2 x W/2 x 64] --> A3[卷积与池化<br>H/4 x W/4 x 128] --> A4[卷积与池化<br>H/8 x W/8 x 256] --> A5[卷积与池化<br>H/16 x W/16 x 512] --> A6[卷积与池化<br>H/32 x W/32 x 1024] end subgraph B [解码器 - 上采样与跳跃融合] direction TB B1[预测层<br>H/32 x W/32 x N] -- 2x上采样 --> B2[score pool4<br>H/16 x W/16 x N] A4 -- 跳跃连接1 --> C1[1x1 卷积<br>H/8 x W/8 x 256] -- 1x1 卷积 --> C2[score pool3<br>H/8 x W/8 x N] B2 -- 与 score pool3 相加 --> B3[融合特征<br>H/8 x W/8 x N] -- 8x上采样 --> B4[最终输出<br>H x W x N] end A6 -- 核心改变: <br>全连接层 -> 卷积层 --> B1 A5 -- 跳跃连接2 --> B2 反卷积(转置卷积) 解码器中用于还原图像到输出大小的部分。 ...

October 25, 2025 · 1 min · 171 words · Bob
微信二维码

扫一扫,加我微信