标签: convolutional-neural-network

如何加载图像并将其转换为 PyTorch 的适当张量?

我正在尝试自定义加载一些带有一些标签的图像文件(JPG 文件),然后按照此处的示例将它们输入 PyTorch 中的卷积神经网络 (CNN) 。但是,似乎仍然没有像样的端到端教程。我看到的问题如下。

RuntimeError: thnn_conv2d_forward is not implemented for type
torch.ByteTensor
Run Code Online (Sandbox Code Playgroud)

我的Dataset看起来像下面这样。

class ImageData(Dataset):
    def __init__(self, width=256, height=256, transform=None):
        self.width = width
        self.height = height
        self.transform = transform
        y, x = get_images() #y is a list of labels, x is a list of file paths
        self.y = y
        self.x = x

    def __getitem__(self, index):
        img = Image.open(self.x[index]) # use pillow to open a file
        img = img.resize((self.width, self.height)) # resize the …
Run Code Online (Sandbox Code Playgroud)

python image-processing pillow pytorch convolutional-neural-network

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

蒙特卡洛 (MC) 在 Keras 中使用 R 退出

如何在卷积神经网络中使用 Keras 实现 Monte Carlo dropout 以估计 YARIN GAL 建议的预测不确定性?我正在使用 R。R代码在这里

我正在小批量拟合模型,并希望使用 Monte Carlo dropout 小批量评估模型。在 Keras 文档中找不到任何提示。顺便说一句,我用标志训练 = TRUE 训练了我的模型。

谢谢

r montecarlo keras dropout convolutional-neural-network

4
推荐指数
1
解决办法
1054
查看次数

Keras 'Tensor' 对象没有属性 'ndim'

我正在尝试实现一个连体网络(通过使用三元组损失方法)。我就是不能让它训练。经过多次尝试,我想我的问题出现在生成器中(我准备输入数据流用于训练),但到目前为止我无法定位问题。帮助!:)

这是我的模型定义(它基于 ResNet50)。

model = ResNet50(weights='imagenet')
model.layers.pop()
for layer in model.layers:
    layer.trainable = False
x = model.get_layer('flatten_1').output
model_out = Dense(128, activation='sigmoid',  name='model_out')(x)
new_model = Model(inputs=model.input, outputs=model_out)
Run Code Online (Sandbox Code Playgroud)

这里我定义了要训练的模型:

anchor_in = Input(shape=(224, 224, 3))
positive_in = Input(shape=(224, 224, 3))
negative_in = Input(shape=(224, 224, 3))

anchor_out = new_model(anchor_in)
positive_out = new_model(positive_in)
negative_out = new_model(negative_in)

merged_vector = concatenate([anchor_out, positive_out, negative_out], axis=-1)
# Define the model to be trained
siamese_model = Model(inputs=[anchor_in, positive_in, negative_in],
                      outputs=merged_vector)
siamese_model.compile(optimizer=Adam(lr=.001), loss=triplet_loss)
Run Code Online (Sandbox Code Playgroud)

能够训练模型。我需要使用生成器为它提供数据,这是我定义它的方式:

(请注意,我特意在每个文件夹中只放了 1 张图片只是为了开始。如果可以的话,我稍后会增加每个文件夹中的 # 个图片。)

def generator_three_imgs(): …
Run Code Online (Sandbox Code Playgroud)

machine-learning keras tensorflow convolutional-neural-network

4
推荐指数
1
解决办法
9095
查看次数

PyTorch 中的自定义卷积核和环形卷积

我想用 PyTorch 卷积做两件事,文档或代码中没有提到:

  1. 我想用这样的固定内核创建卷积:

    000010000
    000010000
    100010001
    000010000
    000010000
    
    Run Code Online (Sandbox Code Playgroud)

    我猜,水平方面就像膨胀,但垂直部分是不同的。我看到 dilation 可以作为代码中的参数使用,但它必须是标量或单元素元组(不是每个维度一个元素),所以我认为它不能在这里做我想做的事。

  2. 我希望我的卷积像环形一样“环绕”,而不是使用填充。

    编辑添加:我看到有一个未解决的问题,这也提供了一个次优的解决方法。所以,我想还没有“正确”的方法来做到这一点。

padding convolution pytorch convolutional-neural-network

4
推荐指数
1
解决办法
2925
查看次数

如何通过 Tensorflow conv2d 提供批量图像序列

这似乎是一个微不足道的问题,但我一直无法找到答案。

我已经批量处理了一系列形状的图像:

[batch_size, number_of_frames, frame_height, frame_width, number_of_channels]

我想通过几个卷积层和池化层来传递每一帧。然而,TensorFlow 的conv2d层接受形状的 4D 输入:

[batch_size, frame_height, frame_width, number_of_channels]

我的第一次尝试是使用tf.map_fnoveraxis=1,但我发现这个函数不会传播梯度

我的第二次尝试是tf.unstack在第一个维度上使用,然后使用tf.while_loop. 但是, mybatch_sizenumber_of_frames是动态确定的(即两者都是None),如果未指定则tf.unstack引发。我尝试指定,但这会引发{ValueError} Cannot infer num from shape (?, ?, 30, 30, 3)numnum=tf.shape(self.observations)[1]{TypeError} Expected int for argument 'num' not <tf.Tensor 'A2C/infer/strided_slice:0' shape=() dtype=int32>.

tensorflow recurrent-neural-network convolutional-neural-network

4
推荐指数
1
解决办法
457
查看次数

ValueError:检查输入时出错:预期 conv2d_1_input 有 4 个维度,但得到了形状为 (8020, 1) 的数组

我正在尝试构建一个图像分类器,但我遇到了本文标题中提到的错误。下面是我正在处理的代码。我如何将形状为 (8020,) 的 numpy 数组转换为函数 fit() 所需的形状?我试图打印输入形状:train_img_array.shape[1:] 但它给出了一个空形状:()

import numpy as np
img_train.shape
img_valid.shape
img_train.head(5)
img_valid.head(5)

(8020, 4)
(2006, 4)
         ID  index  class                                               data
8030  11596  11596      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
2152  11149  11149      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
550   10015  10015      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
1740   9035   9035      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
9549   8218   8218      1 …
Run Code Online (Sandbox Code Playgroud)

python numpy keras convolutional-neural-network

3
推荐指数
1
解决办法
2552
查看次数

如何使用 tf.layers.conv2d 共享权重

我已经使用 tf.layers.conv2d 层构建了一个自动编码器,并希望分阶段训练它。即先训练外层,然后训练中层,然后训练内层。我知道这可以使用 tf.nn.conv2d,因为权重是使用 tf.get_variable 声明的,但我认为这也应该可以使用 tf.layers.conv2d。

如果我输入一个不同于原始图的新变量范围来更改卷积层的输入(即在阶段 1 期间跳过内层),我将无法重用权重。如果我不输入新的变量范围,我将无法冻结我不想在此阶段训练的权重。

基本上我想在这里使用 Aurélien Géron 的训练方法https://github.com/ageron/handson-ml/blob/master/15_autoencoders.ipynb

除了我想使用 cnn 而不是密集层。怎么做?

share tensorflow convolutional-neural-network

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

为什么 tensorflow 消耗这么多内存?

  • 我有一个简单的 CNN(4 个 conv-pool-lrelu 层和 2 个完全连接的层)。
  • 我只在 CPU 上使用 TensorFlow(没有 GPU)。
  • 我有~6GB 的可用内存。
  • 我的批次由 56 张 640x640 像素 ( < 100 MB ) 的图像组成。

并且 TensorFlow 消耗的内存超过可用内存(显然导致程序崩溃)。

我的问题是:为什么 TensorFlow 需要这么多内存来运行我的网络?我不明白是什么占用了这么多空间(也许缓存数据几次以优化卷积计算?保存所有隐藏输出用于反向传播?)。有没有办法防止 TensorFlow 消耗这么多内存?

旁注:

  • 我无法减少批处理的大小,我正在尝试进行一些多实例学习,因此我需要在一次运行中计算所有补丁。
  • 我正在使用 AdamOptimizer
  • 我所有的卷积都是 5x5 窗口,1x1 步长,具有(从第一个到最后一个)32、64、128 和 256 个特征。我正在使用泄漏 ReLU 和 2x2 最大池化。FC 层由 64 个和 3 个神经元组成。
  • 使用 Ubuntu 16.4 / Python 3.6.4 / TensorFlow 1.6.0

python memory tensorflow convolutional-neural-network

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

如何计算卷积神经网络中的参数总数?

如何计算CNN网络中的参数总数

这是代码:

input_shape = (32, 32, 1)
flat_input_size = input_shape[0]*input_shape[1]*input_shape[2]
num_classes = 4

cnn_model = Sequential()
cnn_model.add(Conv2D(32, (3, 3), padding='same',
                 input_shape=input_shape))
cnn_model.add(Activation('relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
cnn_model.add(Conv2D(64, (3, 3)))
cnn_model.add(Activation('relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
cnn_model.add(Dropout(0.25))
cnn_model.add(Conv2D(128, (3, 3), padding='same'))
cnn_model.add(Activation('relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
cnn_model.add(Dropout(0.25))
cnn_model.add(Flatten())
cnn_model.add(Dense(512))
cnn_model.add(Activation('relu'))
cnn_model.add(Dropout(0.5))
cnn_model.add(Dense(num_classes))
cnn_model.add(Activation('softmax'))
Run Code Online (Sandbox Code Playgroud)

这是结果 在此处输入图片说明

如何获得 320, 18496, 73856, 590336, 2052,谁能解释一下?

machine-learning neural-network deep-learning convolutional-neural-network

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

使用公式的Conv2D转置输出形状

[-1,256,256,3]使用如下所示的转置图层作为输出形状。我打印输出形状。我的问题特别是关于高度和宽度这两者的问题256。通道似乎是我代码中最后一个转置层的滤波器数量。

我相当简单地假设公式是这样的。我读了其他主题。

H = (H1 - 1)*stride + HF - 2*padding
Run Code Online (Sandbox Code Playgroud)

但是当我计算时,我似乎没有得到该输出。我想我可能会缺少填充计算,那么添加了多少填充'SAME'

我的代码是这个。

H = (H1 - 1)*stride + HF - 2*padding
Run Code Online (Sandbox Code Playgroud)

python tensorflow convolutional-neural-network

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

从keras模型中将特征提取到数据集中

我使用运行CNN训练MNIST图像的以下代码(此处礼貌):

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 1

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], …
Run Code Online (Sandbox Code Playgroud)

python machine-learning keras tensorflow convolutional-neural-network

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