我在CNN上使用二进制分类器.我有两个类别"我"和"其他".我有大约250张自己的图像和500张其他图像(随机面部数据库).我目前的图层实现非常简单
self.model.add(Conv2D(128, (2, 2), padding='same',
input_shape=dataset.X_train.shape[1:]))
self.model.add(Activation('relu'))
self.model.add(MaxPooling2D(pool_size=(2, 2)))
self.model.add(Dropout(0.25))
self.model.add(Conv2D(64, (2, 2), padding='same'))
self.model.add(Activation('relu'))
self.model.add(MaxPooling2D(pool_size=(2, 2)))
self.model.add(Dropout(0.25))
self.model.add(Conv2D(32, (1, 1), padding='same'))
self.model.add(Activation('relu'))
self.model.add(MaxPooling2D(pool_size=(2, 2)))
self.model.add(Dropout(0.5))
self.model.add(Dense(512))
self.model.add(Activation('relu'))
self.model.add(Dropout(0.25))
self.model.add(Dense(2)) # for two classes
self.model.add(Activation('softmax'))
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我使用这个网络预测面孔时,它总是将任何面部识别为我的面孔.我已经裁剪了面部,应用了gabor过滤器,但没有任何作用.任何建议将不胜感激.
随机面的预测结果:[KK代表我的脸]概率总是超过97%:
KK identified!
1/1 [==============================] - 0s
[[ 0.9741978 0.0258022]]
1/1 [==============================] - 0s
KK identified!
1/1 [==============================] - 0s
[[ 0.9897241 0.01027592]]
1/1 [==============================] - 0s
Run Code Online (Sandbox Code Playgroud)
我的图像预测结果:[KK代表我的脸]概率总是超过99%:
KK identified!
1/1 [==============================] - 0s
[[ 0.99639165 0.00360837]]
1/1 [==============================] - 0s
KK identified! …Run Code Online (Sandbox Code Playgroud) 在我之前关于在更大的音频样本中找到参考音频样本的问题中,有人建议我应该使用卷积.
使用DSPUtil,我能够做到这一点.我玩了一下,尝试了不同的音频样本组合,看看结果是什么.为了可视化数据,我只是将原始音频作为数字转储到Excel并使用这些数字创建了一个图表.一个高峰是可见的,但我真的不知道这对我有什么帮助.我有这些问题:
任何帮助都非常感谢.
以下图片是使用Excel进行分析的结果:
更新和解决方案:
感谢Han的广泛帮助,我实现了目标.
在我没有FFT的情况下推出自己的慢速实现后,我发现alglib提供了快速实现.我的问题有一个基本假设:其中一个音频样本完全包含在另一个中.
因此,以下代码返回两个音频样本中较大者中的样本中的偏移量以及该偏移量处的归一化互相关值.1表示完全相关,0表示根本没有相关,-1表示完全负相关:
private void CalcCrossCorrelation(IEnumerable<double> data1,
IEnumerable<double> data2,
out int offset,
out double maximumNormalizedCrossCorrelation)
{
var data1Array = data1.ToArray();
var data2Array = data2.ToArray();
double[] result;
alglib.corrr1d(data1Array, data1Array.Length,
data2Array, data2Array.Length, out result);
var max = double.MinValue;
var index = 0;
var i = 0;
// Find the maximum …Run Code Online (Sandbox Code Playgroud) 谁知道计算卷积的最快方法?不幸的是,我处理的矩阵非常大(500x500x200),如果我convn在MATLAB中使用它需要很长时间(我必须在嵌套循环中迭代这个计算).所以,我使用FFT进行卷积,现在速度更快.但是,我仍然在寻找一种更快的方法.任何的想法?
我一直在使用TensorFlow中卷积网的这个例子进行编码,我对这种权重分配感到困惑:
weights = {
# 5x5 conv, 1 input, 32 outputs
'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),
# 5x5 conv, 32 inputs, 64 outputs
'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])),
# fully connected, 7*7*64 inputs, 1024 outputs
'wd1': tf.Variable(tf.random_normal([7*7*64, 1024])),
# 1024 inputs, 10 outputs (class prediction)
'out': tf.Variable(tf.random_normal([1024, n_classes]))
}
Run Code Online (Sandbox Code Playgroud)
我们怎么知道'wd1'权重矩阵应该有7 x 7 x 64行?
它后来用于重塑第二个卷积层的输出:
# Fully connected layer
# Reshape conv2 output to fit dense layer input
dense1 = tf.reshape(conv2, [-1, _weights['wd1'].get_shape().as_list()[0]])
# Relu activation
dense1 = …Run Code Online (Sandbox Code Playgroud) 为什么选择Tensorflow更喜欢右下角的填充?使用'SAME'填充,对我来说,在第一个真实像素处启动内核的中心锚点会合乎逻辑.由于使用了不对称填充,这导致与其他一些框架的差异.我确实理解非对称填充原则上是好的,否则将留下未使用的填充行/列.
如果Tensorflow会优先考虑左侧和顶部的填充,那么它将进行卷积和权重与Caffe/cudnn/$ frameworks相同,并且无论填充如何,权重转换都是兼容的.
码:
import numpy as np
import tensorflow as tf
import torch
import torch.nn as nn
tf.enable_eager_execution()
def conv1d_tf(data, kernel_weights, stride):
filters = np.reshape(kernel_weights, [len(kernel_weights), 1, 1])
out = tf.nn.conv1d(
value=data,
filters=filters,
stride=stride,
padding='SAME',
data_format='NCW',
)
return out
def conv1d_pytorch(data, kernel_weights, stride):
filters = np.reshape(kernel_weights, [1, 1, len(kernel_weights)])
kernel_size = len(kernel_weights)
size = data.shape[-1]
def same_padding(size, kernel_size, stride, dilation):
padding = ((size - 1) * (stride - 1) + dilation * (kernel_size - 1)) //2
return padding
padding …Run Code Online (Sandbox Code Playgroud) 有人应该添加"net#"作为标签.我正在尝试通过使用本教程将其转换为卷积神经网络来改进Azure机器学习工作室中的神经网络:
https://gallery.cortanaintelligence.com/Experiment/Neural-Network-Convolution-and-pooling-deep-net-2
我和教程之间的差异是我正在使用35个功能和1个标签进行回归,他们正在使用28x28功能和10个标签进行分类.
我从基本和第二个例子开始,让他们使用:
input Data [35];
hidden H1 [100]
from Data all;
hidden H2 [100]
from H1 all;
output Result [1] linear
from H2 all;
Run Code Online (Sandbox Code Playgroud)
现在转变为卷积我误解了.在这里的教程和文档中:https://docs.microsoft.com/en-us/azure/machine-learning/machine-learning-azure-ml-netsharp-reference-guide它没有提到节点元组值的方式计算隐藏层.教程说:
hidden C1 [5, 12, 12]
from Picture convolve {
InputShape = [28, 28];
KernelShape = [ 5, 5];
Stride = [ 2, 2];
MapCount = 5;
}
hidden C2 [50, 4, 4]
from C1 convolve {
InputShape = [ 5, 12, 12];
KernelShape = [ 1, 5, 5];
Stride …Run Code Online (Sandbox Code Playgroud) machine-learning convolution azure-machine-learning-studio net#
在我正在研究的一个教程中(下面给出的链接),作者将基线神经网络结构概述为:
卷积输入层,32个大小为3×3的特征映射,整流器激活函数和最大范数的权重约束设置为3.
model.add(Conv2D(32, (3, 3), input_shape=(3, 32, 32), padding='same', activation='relu', kernel_constraint=maxnorm(3)))
Run Code Online (Sandbox Code Playgroud)
最大范数的权重约束对Conv层意味着什么?(我们正在使用Keras.)
谢谢!
optimization convolution computer-vision conv-neural-network keras
我的第一层是:
model.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, padding="same", activation="relu", input_shape=[32, 32, 3]))
Run Code Online (Sandbox Code Playgroud)
以及Model汇总表中的参数个数:
Layer (type) Output Shape Param #
=================================================================
conv2d_4 (Conv2D) (None, 32, 32, 32) 896
Run Code Online (Sandbox Code Playgroud)
根据我的理解,参数的数量必须是:
(No of filters) X (Number of parameters in Kernel)
Run Code Online (Sandbox Code Playgroud)
即在我的情况下==> 32 X (3 X 3) = 288
但它的896。它是怎么来的896?
谢谢
我有 2 个二维数组。我试图沿轴 1 进行卷积。np.convolve没有提供axis参数。这里的答案是,使用 1 个 2D 数组与 1D 数组进行卷积np.apply_along_axis。但它不能直接应用于我的用例。这里的问题没有答案。
MWE如下。
import numpy as np
a = np.random.randint(0, 5, (2, 5))
"""
a=
array([[4, 2, 0, 4, 3],
[2, 2, 2, 3, 1]])
"""
b = np.random.randint(0, 5, (2, 2))
"""
b=
array([[4, 3],
[4, 0]])
"""
# What I want
c = np.convolve(a, b, axis=1) # axis is not supported as an argument
"""
c=
array([[16, 20, 6, …Run Code Online (Sandbox Code Playgroud) 有人可以告诉我什么include_top = True意味着在keras中定义模型?
我在Keras文档中读到了这一行的含义.它说include_top:是否在网络顶部包含完全连接的层.
我仍然在寻找这行代码的直观解释.
ResNet50(include_top=True)
Run Code Online (Sandbox Code Playgroud)
谢谢!
convolution ×10
keras ×4
python ×3
tensorflow ×2
.net ×1
arrays ×1
azure-machine-learning-studio ×1
c# ×1
c++ ×1
caffe ×1
matlab ×1
net# ×1
numpy ×1
optimization ×1
padding ×1