(已添加此问题的更新.)
我是比利时根特大学的研究生; 我的研究是用深度卷积神经网络进行情感识别.我正在使用Caffe框架来实现CNN.
最近我遇到了关于班级失衡的问题.我正在使用9216个训练样本,约 5%标记为阳性(1),其余样品标记为阴性(0).
我正在使用SigmoidCrossEntropyLoss图层来计算损失.在训练时,即使在几个时期之后,损失也会减少并且准确度非常高.这是由于不平衡:网络总是预测为负(0).(精确度和召回率均为零,支持此声明)
为了解决这个问题,我想根据预测 - 真值组合来衡量对损失的贡献(严厉惩罚假阴性).我的导师/教练还建议我在通过随机梯度下降(sgd)反向传播时使用比例因子:该因子将与批次中的不平衡相关联.仅包含负样本的批次根本不会更新权重.
我只向Caffe添加了一个自定义图层:报告其他指标,如精度和召回.我对Caffe代码的经验有限,但我有很多编写C++代码的专业知识.
任何人都可以帮助我或指出我如何调整SigmoidCrossEntropyLoss和Sigmoid层以适应以下变化:
提前致谢!
我按照Shai的建议加入了InfogainLossLayer.我还添加了另一个自定义层,H根据当前批次中的不平衡构建了infogain矩阵.
目前,矩阵配置如下:
H(i, j) = 0 if i != j
H(i, j) = 1 - f(i) if i == j (with f(i) = the frequency of class i in the batch)
Run Code Online (Sandbox Code Playgroud)
我计划将来为矩阵试验不同的配置.
我已经用10:1的不平衡测试了这个.结果表明网络现在正在学习有用的东西:( 30个时期后的结果)
我正在学习TensorFlow,构建一个多层感知器模型.我正在研究一些例子:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/multilayer_perceptron.ipynb
然后,我在下面的代码中有一些问题:
def multilayer_perceptron(x, weights, biases):
:
:
pred = multilayer_perceptron(x, weights, biases)
:
:
with tf.Session() as sess:
sess.run(init)
:
correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print ("Accuracy:", accuracy.eval({x: X_test, y: y_test_onehot}))
Run Code Online (Sandbox Code Playgroud)
我想知道做什么tf.argmax(prod,1)和tf.argmax(y,1)意味着什么,返回(类型和价值)究竟是什么?并且是correct_prediction变量而不是实际值?
最后,我们如何从tf会话中获取y_test_prediction数组(输入数据时的预测结果X_test)?非常感谢!
我正在尝试构建一个LSTM自动编码器,目的是从序列中获取一个固定大小的矢量,这表示序列尽可能好.该自动编码器由两部分组成:
LSTM编码器:获取序列并返回输出向量(return_sequences = False)LSTM解码器:获取输出向量并返回序列(return_sequences = True)因此,最后,编码器是多对一 LSTM,解码器是一对多 LSTM.
图片来源:Andrej Karpathy
在较高的层次上,编码看起来像这样(类似于这里描述的):
encoder = Model(...)
decoder = Model(...)
autoencoder = Model(encoder.inputs, decoder(encoder(encoder.inputs)))
autoencoder.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
autoencoder.fit(data, data,
batch_size=100,
epochs=1500)
Run Code Online (Sandbox Code Playgroud)
data数组的形状(训练样本数,序列长度,输入维数)(1200, 10, 5)如下所示:
array([[[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
...,
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]],
... ] …Run Code Online (Sandbox Code Playgroud) 我知道在1-d情况下,两个矢量之间的卷积a可以被计算为
b,也可作为在之间的乘积conv(a, b)和T_a,其中b是用于相应的托普利兹矩阵T_a.
是否有可能将这个想法扩展到2-D?
给定a和a = [5 1 3; 1 1 2; 2 1 3]是否有可能b=[4 3; 1 2]在Toeplitz矩阵中进行转换a并T_a在1-D情况下计算矩阵矩阵乘积?
convolution matrix-multiplication neural-network deep-learning conv-neural-network
我一直在关注DeepLearning.net上的教程,以学习如何实现从图像中提取特征的卷积神经网络.本教程有很好的解释,易于理解和遵循.
我想扩展相同的CNN,同时从视频(图像+音频)中提取多模态功能.
我知道视频输入只不过是与音频相关的一段时间(例如30 FPS)中显示的一系列图像(像素强度).但是,我真的不明白音频是什么,它是如何工作的,或者它是如何被分解为馈入网络的.
我已经阅读了几篇关于这个主题的论文(多模态特征提取/表示),但没有人解释过如何将音频输入到网络中.
此外,我从我的研究中了解到,多模态表征是我们的大脑真正运作的方式,因为我们没有刻意过滤我们的感官来实现理解.这一切都是在我们不知道的情况下同时发生的(联合代表).一个简单的例子是,如果我们听到狮子吼声,我们立即构成狮子的心理形象,感受到危险,反之亦然.在我们的大脑中发射了多种神经模式,以全面了解狮子的样子,听起来像,感觉,闻起来像是等等.
上面提到的是我的最终目标,但暂时我为了简单起见而打破了我的问题.
如果有人能够阐明音频如何被解剖,然后在卷积神经网络中表现出来,我将非常感激.我还要感谢您对多模态同步,联合表示以及使用多模态数据训练CNN的正确方法的看法.
编辑: 我发现音频可以表示为频谱图.它作为音频的通用格式,表示为具有两个几何尺寸的图形,其中水平线表示时间,垂直表示频率.

是否可以对这些光谱图上的图像使用相同的技术?换句话说,我可以简单地使用这些频谱图作为卷积神经网络的输入图像吗?
convolution feature-extraction neural-network supervised-learning deep-learning
我正在尝试使用caffe和python进行实时图像分类.我在一个过程中使用OpenCV从我的网络摄像头流式传输,并在一个单独的过程中,使用caffe对从网络摄像头拉出的帧执行图像分类.然后我将分类结果传回主线程以标注网络摄像头流.
问题是即使我有一个NVIDIA GPU并且正在执行GPU上的caffe预测,主线程也会变慢.通常没有做任何预测,我的网络摄像头流以30 fps运行; 但是,根据预测,我的网络摄像头流最多可获得15 fps.
我已经验证了caffe在执行预测时确实使用了GPU,而且我的GPU或GPU内存并没有最大化.我还验证了我的CPU内核在程序中的任何时候都没有达到最大限度.我想知道我是做错了什么,或者是否有办法让这两个过程真正分开.任何建议表示赞赏.这是我的代码供参考
class Consumer(multiprocessing.Process):
def __init__(self, task_queue, result_queue):
multiprocessing.Process.__init__(self)
self.task_queue = task_queue
self.result_queue = result_queue
#other initialization stuff
def run(self):
caffe.set_mode_gpu()
caffe.set_device(0)
#Load caffe net -- code omitted
while True:
image = self.task_queue.get()
#crop image -- code omitted
text = net.predict(image)
self.result_queue.put(text)
return
import cv2
import caffe
import multiprocessing
import Queue
tasks = multiprocessing.Queue()
results = multiprocessing.Queue()
consumer = Consumer(tasks,results)
consumer.start()
#Creating window and starting video capturer from camera
cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)
#Try to …Run Code Online (Sandbox Code Playgroud) 我正在阅读的介绍性文档(TOC在这里)在没有定义的情况下引入了这个术语.
[1] https://www.tensorflow.org/get_started/
[2] https://www.tensorflow.org/tutorials/mnist/tf/
Run Code Online (Sandbox Code Playgroud) machine-learning neural-network deep-learning tensorflow tensor
我正在按照本教程学习TensorFlow Slim,但是在运行以下代码进行Inception时:
import numpy as np
import os
import tensorflow as tf
import urllib2
from datasets import imagenet
from nets import inception
from preprocessing import inception_preprocessing
slim = tf.contrib.slim
batch_size = 3
image_size = inception.inception_v1.default_image_size
checkpoints_dir = '/tmp/checkpoints/'
with tf.Graph().as_default():
url = 'https://upload.wikimedia.org/wikipedia/commons/7/70/EnglishCockerSpaniel_simon.jpg'
image_string = urllib2.urlopen(url).read()
image = tf.image.decode_jpeg(image_string, channels=3)
processed_image = inception_preprocessing.preprocess_image(image, image_size, image_size, is_training=False)
processed_images = tf.expand_dims(processed_image, 0)
# Create the model, use the default arg scope to configure the batch norm parameters.
with slim.arg_scope(inception.inception_v1_arg_scope()):
logits, …Run Code Online (Sandbox Code Playgroud) python machine-learning computer-vision deep-learning tensorflow
在大多数体系结构中,conv层后面跟着一个池化层(max/avg等).由于这些汇集层只是选择前一层的输出(即转换),我们是否可以使用带有步幅2的卷积并期望类似的精度结果和减少的过程需求?
import pandas as pd
import numpy as np
import cv2
from torch.utils.data.dataset import Dataset
class CustomDatasetFromCSV(Dataset):
def __init__(self, csv_path, transform=None):
self.data = pd.read_csv(csv_path)
self.labels = pd.get_dummies(self.data['emotion']).as_matrix()
self.height = 48
self.width = 48
self.transform = transform
def __getitem__(self, index):
pixels = self.data['pixels'].tolist()
faces = []
for pixel_sequence in pixels:
face = [int(pixel) for pixel in pixel_sequence.split(' ')]
# print(np.asarray(face).shape)
face = np.asarray(face).reshape(self.width, self.height)
face = cv2.resize(face.astype('uint8'), (self.width, self.height))
faces.append(face.astype('float32'))
faces = np.asarray(faces)
faces = np.expand_dims(faces, -1)
return faces, self.labels
def __len__(self): …Run Code Online (Sandbox Code Playgroud) deep-learning ×10
python ×4
tensorflow ×4
caffe ×2
convolution ×2
c++ ×1
gpgpu ×1
keras ×1
max-pooling ×1
pytorch ×1
tensor ×1