标签: conv-neural-network

监控Caffe的培训/验证过程

我正在训练Caffe参考模型来分类图像.我的工作要求我通过在整个训练集和分别具有100K和50K图像的验证集的每1000次迭代之后绘制模型的准确性图来监视训练过程.现在,我采取天真的方法,在每1000次迭代后制作快照,运行C++分类代码,该代码读取原始JPEG图像并转发到网络并输出预测标签.但是,这在我的机器上花费了太多时间(使用Geforce GTX 560 Ti)

有没有更快的方法可以在训练集和验证集上获得快照模型的准确性图表?

我在考虑使用LMDB格式而不是原始图像.但是,我找不到有关使用LMDB格式在C++中进行分类的文档/代码.

c++ classification deep-learning caffe conv-neural-network

16
推荐指数
1
解决办法
1万
查看次数

计算交叉熵损失时的Tensorflow误差

我得到以下错误

ValueError: Tensor conversion requested dtype float32 for Tensor with dtype int32: 'Tensor("Placeholder_1:0", shape=TensorShape([Dimension(128), Dimension(2)]), dtype=int32)'
Run Code Online (Sandbox Code Playgroud)

当我试图计算交叉熵损失

losses = tf.nn.softmax_cross_entropy_with_logits(scores, input_y)
Run Code Online (Sandbox Code Playgroud)

我使用Python 3.4.3.

有什么想法吗?

neural-network conv-neural-network tensorflow

16
推荐指数
1
解决办法
2万
查看次数

如何在多个核心和线程上运行TensorFlow

我应该开始说我对任何类型的并行/多线程/多处理编程都是全新的.

现在,我有机会在32个核心上运行我的TensorFlow CNN(每个核心有2个超线程).我花了很多时间试图理解我应该如何修改(如果必须的话)我的代码以便利用所有的计算能力.不幸的是,我没有做任何事情.我希望TF可以自动完成,但是当我启动我的模型并检查topCPU使用情况时,我发现大部分时间都是100%的CPU使用率和几个200%的峰值.如果使用了所有核心,我希望看到100*64 = 6400%的使用率(正确吗?).我怎么能做到这一点?我应该做一些类似于这里解释的事情吗?如果是这种情况,我是否正确理解所有多线程仅适用于涉及队列的计算?这是否真的可以使用所有可用的计算能力(因为在我看来,队列仅用于阅读和批量训练样本时)?

如果需要,这就是我的代码:(main.py)

# pylint: disable=missing-docstring
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import time

from six.moves import xrange  # pylint: disable=redefined-builtin
import tensorflow as tf
from pylab import *

import argparse
import cnn
import freader_2

training_feats_file = ["file_name"]
training_lbls_file = ["file_name"]
test_feats_file = 'file_name'
test_lbls_file = 'file_name'
learning_rate = 0.1
testset_size = 1000
batch_size = 1000
testset_size = 793
tot_samples = 810901
max_steps = 3300 …
Run Code Online (Sandbox Code Playgroud)

python multithreading neural-network conv-neural-network tensorflow

16
推荐指数
2
解决办法
2万
查看次数

如何计算AlexNet的参数数量?

我还没有找到AlexNet的参数(权重+偏差)的计算,所以我试图计算它,但我不确定它是否正确:

conv1:(11*11)*3*96 + 96 = 34944

conv2:(5*5)*96*256 + 256 = 614656

conv3:(3*3)*256*384 + 384 = 885120

conv4:(3*3)*384*384 + 384 = 1327488

conv5:(3*3)*384*256 + 256 = 884992

fc1:(6*6)*256*4096 + 4096 = 37752832

fc2:4096*4096 + 4096 = 16781312

fc3:4096*1000 + 1000 = 4097000

这导致总量为62378344的参数.这个计算对吗?

computer-vision conv-neural-network

16
推荐指数
1
解决办法
9508
查看次数

类型错误:传递给优化器的意外关键字参数:learning_rate

我正在尝试加载在 Azure VM(NC 促销)上训练的 Keras 模型。但我收到以下错误。

类型错误:意外的关键字参数传递给优化器:learning_rate

编辑:

这是我用来加载模型的代码片段:

from keras.models import load_model
model = load_model('my_model_name.h5')
Run Code Online (Sandbox Code Playgroud)

python deep-learning conv-neural-network keras tensorflow

16
推荐指数
6
解决办法
3万
查看次数

InvalidArgumentError:loc 处需要可广播形状(未知)

背景

我对 Python 和机器学习完全陌生。我只是尝试根据在互联网上找到的代码建立一个 UNet,并希望将其适应我正在处理的情况。当尝试使用.fitUNet 来训练数据时,我收到以下错误:

InvalidArgumentError:  required broadcastable shapes at loc(unknown)
     [[node Equal (defined at <ipython-input-68-f1422c6f17bb>:1) ]] [Op:__inference_train_function_3847]
Run Code Online (Sandbox Code Playgroud)

当我搜索它时,我得到了很多结果,但大多数都是不同的错误。

这是什么意思?更重要的是,我该如何解决这个问题?

导致错误的代码

该错误的上下文如下:我想分割图像并标记不同的类。我为训练、测试和验证数据设置了目录“trn”、“tst”和“val”。该dir_dat()函数适用于获取相应数据集os.path.join()的完整路径。这 3 个文件夹中的每一个都有每个类的子目录,并用整数标记。在每个文件夹中,都有一些相应类别的图像。.tif

我定义了以下图像数据生成器(训练数据稀疏,因此增强):

classes = np.array([ 0,  2,  4,  6,  8, 11, 16, 21, 29, 30, 38, 39, 51])
bs = 15 # batch size

augGen = ks.preprocessing.image.ImageDataGenerator(rotation_range = 365,
                                                   width_shift_range = 0.05,
                                                   height_shift_range = 0.05,
                                                   horizontal_flip = True,
                                                   vertical_flip = True,
                                                   fill_mode = "nearest") \
    .flow_from_directory(directory = dir_dat("trn"), …
Run Code Online (Sandbox Code Playgroud)

python neural-network conv-neural-network tensorflow tf.keras

16
推荐指数
3
解决办法
5万
查看次数

卷积神经网络中的随机裁剪和翻转

在很多关于卷积神经网络(CNN)的研究论文中,我看到人们从图像中随机裁剪一个方形区域(例如224x224),然后随机地水平翻转它.为什么这种随机裁剪和翻转完成了?此外,为什么人们总是裁剪一个方形区域.CNN不能在矩形区域上工作吗?

image-processing neural-network conv-neural-network

15
推荐指数
1
解决办法
8064
查看次数

TensorFlow - Titan X上的低GPU使用率

有一段时间,我注意到TensorFlow(v0.8)似乎没有完全使用我的Titan X的计算能力.对于我一直运行的几个CNN,GPU使用率似乎没有超过~30%.通常,GPU利用率甚至更低,更像是15%.显示此行为的CNN的一个特定示例是来自DeepMind的Atari论文的带有Q学习的CNN(请参阅下面的代码链接).

当我看到我们实验室的其他人运行用Theano或Torch编写的CNN时,GPU使用率通常为80%以上.这让我想知道,为什么我在TensorFlow中编写的CNN如此"慢",我该怎么做才能更有效地利用GPU处理能力呢?通常,我对如何分析GPU操作并发现瓶颈所在的方式感兴趣.任何建议如何做到这一点都非常受欢迎,因为目前TensorFlow似乎不太可能.

我做的事情是为了找到更多关于这个问题的原因:

  1. 分析TensorFlow的设备位置,一切似乎都在gpu:/ 0上,所以看起来不错.

  2. 使用cProfile,我优化了批处理生成和其他预处理步骤.预处理在单个线程上执行,但TensorFlow步骤执行的实际优化需要更长的时间(请参阅下面的平均运行时间).提高速度的一个明显想法是使用TFs队列运行器,但由于批量准备比优化快20倍,我想知道这是否会产生很大的不同.

    Avg. Time Batch Preparation: 0.001 seconds
    Avg. Time Train Operation:   0.021 seconds
    Avg. Time Total per Batch:   0.022 seconds (45.18 batches/second)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在多台计算机上运行以排除硬件问题.

  4. 大约一周前升级到最新版本的CuDNN v5(RC),CUDA Toolkit 7.5并重新安装TensorFlow.

可以在此处找到发生此"问题"的Q-learning CNN的示例:https://github.com/tomrunia/DeepReinforcementLearning-Atari/blob/master/qnetwork.py

显示低GPU利用率的NVIDIA SMI示例:NVIDIA-SMI

performance profiling gpu conv-neural-network tensorflow

15
推荐指数
1
解决办法
3161
查看次数

为什么binary_crossentropy比分类_crossentropy更准确用于Keras中的多类分类?

我正在学习如何使用Keras创建卷积神经网络.我正试图获得MNIST数据集的高精度.

显然categorical_crossentropy是2个以上的课程,binary_crossentropy2个课程.由于有10个数字,我应该使用categorical_crossentropy.然而,经过数十种模型的培训和测试,binary_crossentropy始终表现出色categorical_crossentropy.

在Kaggle,我使用了99 +%的精确度binary_crossentropy和10个时代.同时,categorical_crossentropy即使使用30个时代,我也无法使用97%以上(这不是很多,但我没有GPU,所以训练需要永远).

这就是我的模型现在的样子:

model = Sequential()
model.add(Convolution2D(100, 5, 5, border_mode='valid', input_shape=(28, 28, 1), init='glorot_uniform', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(100, 3, 3, init='glorot_uniform', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.3))
model.add(Flatten())
model.add(Dense(100, init='glorot_uniform', activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(100, init='glorot_uniform', activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(10, init='glorot_uniform', activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adamax', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

machine-learning neural-network deep-learning conv-neural-network keras

15
推荐指数
2
解决办法
9968
查看次数

Keras ValueError:输入0与图层conv2d_1不兼容:预期ndim = 4,发现ndim = 5

我检查了所有解决方案,但我仍面临同样的错误.我的训练图像形状是(26721,32,32,1),我相信它是4维,但我不知道为什么错误显示它是5维.

 model = Sequential()

 model.add(Convolution2D(16, 5, 5, border_mode='same', input_shape= input_shape ))
Run Code Online (Sandbox Code Playgroud)

所以这就是我定义model.fit_generator的方法

(26721, 32, 32, 1)

有人可以帮我这个吗?

python deep-learning conv-neural-network keras tensorflow

15
推荐指数
3
解决办法
3万
查看次数