标签: conv-neural-network

Keras:将图像输入 CNN 并获得图像输出

到目前为止,我一直在 pandas 的数值数据集上练习神经网络,但现在我需要创建一个模型,该模型将图像作为输入并输出该图像的二进制掩码。

我的训练数据为形状为 (602, 2048, 2048, 1) 的 numpy 数组。1 个通道 602 张尺寸为 2048x2048 的图像。输出掩码数组具有相同的维度。

我不明白的是如何定义第一层或如何正确地将数据输入模型。我非常感谢你在这个问题上的帮助

python image-processing conv-neural-network keras

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

我如何使用 keras 创建 3d 输入/3d 输出卷积模型?

我有一个我无法解决的问题。

我想将具有完全连接的 MLP 的 CNN 模型实现到我的具有 2589 个蛋白质的蛋白质数据库。每个蛋白质有 1287 行 69 列作为输入和 1287 行和 8 列作为输出。实际上有 1287x1 的输出,但我使用了一种热编码作为类标签,以便在我的模型中使用交叉熵损失。

我也想要

如果我们认为图像我有一个 3d 矩阵 ** X_train = (2589, 1287, 69) for input** 和y_train =(2589, 1287, 8) output,我的意思是输出也是矩阵。

在我的 keras 代码下面:

model = Sequential()
model.add(Conv2D(64, kernel_size=3, activation="relu", input_shape=(X_train.shape[1],X_train.shape[2])))
model.add(Conv2D(32, kernel_size=3, activation="relu"))
model.add(Flatten())
model.add(Dense((8), activation="softmax"))
Run Code Online (Sandbox Code Playgroud)

但是我遇到了关于密集层的错误:

ValueError: Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (2589, 1287, 8)
Run Code Online (Sandbox Code Playgroud)

好的,我知道 Dense 应该采用正整数单位(Keras 文档中的解释。)。但是我如何实现矩阵输出到我的模型?

我试过了:

model.add(Dense((1287,8), activation="softmax")) …
Run Code Online (Sandbox Code Playgroud)

3d conv-neural-network keras keras-layer

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

如何打开 .pbtxt 文件?

尝试更改 tensorflow 对象检测模型中的标签,但无法打开 pbtxt 文件。可以告诉我是否有任何应用程序可以打开它吗?

deep-learning conv-neural-network tensorflow

0
推荐指数
2
解决办法
9359
查看次数

如何提高图像分类模型中的模型精度

我在做图像分类,我得到的训练准确度是 90,验证是 85,请帮助我如何提高准确度。这是我的模型。

model = Models.Sequential()

model.add(Layers.Conv2D(200,kernel_size=(3,3),activation='relu',input_shape=(64,64,3)))
model.add(Layers.Conv2D(180,kernel_size=(3,3),activation='relu'))
model.add(Layers.MaxPool2D(2,2))
model.add(Layers.Conv2D(180,kernel_size=(3,3),activation='relu'))
model.add(Layers.Conv2D(140,kernel_size=(3,3),activation='relu'))
model.add(Layers.Conv2D(100,kernel_size=(3,3),activation='relu'))
model.add(Layers.Conv2D(50,kernel_size=(3,3),activation='relu'))
model.add(Layers.MaxPool2D(2,2))
model.add(Layers.Flatten())
model.add(Layers.Dense(180,activation='relu'))
model.add(Layers.Dropout(rate=0.5))
model.add(Layers.Dense(100,activation='relu'))
model.add(Layers.Dropout(rate=0.5))
model.add(Layers.Dense(50,activation='relu'))
model.add(Layers.Dropout(rate=0.5))
model.add(Layers.Dense(6,activation='softmax'))

model.compile(optimizer=Optimizer.Adam(lr=0.0001),loss='sparse_categorical_crossentropy',metrics=['accuracy'])
SVG(model_to_dot(model).create(prog='dot', format='svg'))
Utils.plot_model(model,to_file='model.png',show_shapes=True)
model.summary()
Run Code Online (Sandbox Code Playgroud)

这是我的时代:

Epoch 28/35
11923/11923 [==============================] - 58s 5ms/sample - loss: 0.3929 - acc: 0.8777 - val_loss: 0.4905 - val_acc: 0.8437
Epoch 29/35
11923/11923 [==============================] - 59s 5ms/sample - loss: 0.3621 - acc: 0.8849 - val_loss: 0.5938 - val_acc: 0.8394
Epoch 30/35
11923/11923 [==============================] - 58s 5ms/sample - loss: 0.3541 - acc: 0.8865 - …
Run Code Online (Sandbox Code Playgroud)

python image-processing deep-learning conv-neural-network keras

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

更改 AlexNet 的输入维度

我是初学者,我正在尝试实现 AlexNet 进行图像分类。AlexNet的pytorch实现如下:


class AlexNet(nn.Module):

    def __init__(self, num_classes=1000):
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
        self.classifier = nn.Sequential(
            nn.Dropout(),
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = x.view(x.size(0), …
Run Code Online (Sandbox Code Playgroud)

conv-neural-network transfer-learning

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

了解 3D 卷积以及何时使用它?

我是卷积神经网络的新手,我正在学习 3D 卷积。我能理解的是,2D 卷积为我们提供了 XY 维度中低级特征之间的关系,而 3D 卷积有助于检测所有 3 维中的低级特征和它们之间的关系。

考虑使用 2D 卷积层来识别手写数字的 CNN。如果一个数字,比如 5,用不同的颜色书写:

在此处输入图片说明

严格的 2D CNN 是否会表现不佳(因为它们在 z 维度上属于不同的通道)?

另外,是否有使用 3D 卷积的实用的知名神经网络?

convolution neural-network conv-neural-network

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

“密集”类型的对象没有 len()

我尝试创建一个 CNN 模型,但总是收到此错误消息。

错误:TypeError Traceback(最近一次调用最后一次) in () ----> 1 model = simple_conv_model() 5 帧 /usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map (tensor,finished_nodes, nodes_in_progress, layer, node_index, tensor_index) 1345 1346 # 传播到所有之前连接到这个节点的张量。-> 1347 for i in range(len(node.inbound_layers)): 1348 x = node.input_tensors[i] 1349 layer = node.inbound_layers[i] TypeError: 'Dense' 类型的对象没有 len()

这是模型:

def simple_conv_model():
        input_layer=layers.Input(shape=(64,64,3), name="input_layer")    
        model=layers.Conv2D(16,3, activation="relu", padding='same', name="first_block_conv", strides=(1,1)) (input_layer)
        model=layers.MaxPooling2D((2,2), name="first_block_pooling") (model)
        model=layers.BatchNormalization(name="first_block_bn") (model)

        model=layers.Conv2D(32,3, activation="relu", padding='same', name="second_block_conv", strides=(1,1)) (input_layer)
        model=layers.MaxPooling2D((2,2), name="second_block_pooling") (model)
        model=layers.BatchNormalization(name="second_block_bn") (model)

        model=layers.Conv2D(64,3, activation="relu", padding='same', name="third_block_conv", strides=(1,1)) (input_layer)
        model=layers.MaxPooling2D((2,2), name="third_block_pooling") (model)
        model=layers.BatchNormalization(name="third_block_bn") …
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network keras tensorflow

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

PyTorch CNN:损失不变

我曾尝试研究我的不变损失的情况,我找到的所有答案都特定于代码。我刚刚开始学习 CNN,大部分 CNN 来自一个示例,并进行了修改以适应我的数据集的需求。我正在尝试对 ECG 的类型(正常、心房颤动、其他、嘈杂)进行分类。当我尝试训练 CNN 时,损失保持不变,我认为这是因为我的 CNN 没有学习并且只输出零。到目前为止,我已经尝试改变学习率/损失函数并没有产生任何影响。

我是在Google Colab 上这样做的,因此可以随意编辑代码,并且不要忘记将运行时选项卡下的硬件加速更改为 GPU。

代码:

import os
import cv2
import numpy as np
from tqdm import tqdm
from scipy.io import loadmat
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt

if torch.cuda.is_available():
  device = torch.device("cuda:0")
  print("Running on GPU -", device )
else:
  device = torch.device("cpu")
  print("Running on CPU -", device )


REBUILD_DATA = True # processing data

class ECG_DATA(): …
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network pytorch

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

为什么我得到的每个通道的计算填充输入大小小于内核大小?

我有以下模型,但它返回错误。不知道为什么。我尝试过谷歌搜索,但到目前为止还没有找到任何东西。我的输入是 6 x 6 的 numpy 数组。

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=(3,3), stride=1, padding=0)
        self.conv2 = nn.Conv2d(16, 32, kernel_size=(3,3), stride=1, padding=0)
        self.conv3 = nn.Conv2d(32, 64, kernel_size=(3,3), stride=1, padding=0)

        self.fc1 = nn.Linear(64*4*4, 320)
        self.fc2 = nn.Linear(320, 160)
        self.out = nn.Linear(160, 2)


    def forward(self, x):
        x = self.conv1(x)
        x = F.relu(x)
        x = F.max_pool2d(x, kernel_size=2, stride=2)

        x = self.conv2(x)
        x = F.relu(x)
        x = F.max_pool2d(x, kernel_size=2, stride=2)

        x = self.conv3(x)
        x = F.relu(x)
        x = F.max_pool2d(x, kernel_size=2, …
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network pytorch

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

AttributeError:“顺序”对象没有属性“分数”

我正在使用卷积神经网络,在使用顺序神经网络时,我在训练数据时遇到了问题。使用顺序是不可能获得最好的分数吗?

from numpy import array
from numpy import reshape
import numpy as np
def model_CNN(X_train,Y_train,X_test,Y_test):

    model = Sequential()

    model.add(Conv1D(filters=512, kernel_size=32, padding='same', kernel_initializer='normal', activation='relu', input_shape=(256, 1)))
    model.add(Conv1D(filters=512, kernel_size=32, padding='same', kernel_initializer='normal', activation='relu'))
    model.add(Dropout(0.2)) # This is the dropout layer. It's main function is to inactivate 20% of neurons in order to prevent overfitting
    model.add(Conv1D(filters=256, kernel_size=32, padding='same', kernel_initializer='normal', activation='relu'))
    model.add(Dropout(0.2))
    model.add(Conv1D(filters=256, kernel_size=32, padding='same', kernel_initializer='normal', activation='relu'))

    model.add(Flatten())

    optimizer = keras.optimizers.SGD(lr=0.01, momentum=0.5)
    model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
    convolutional_model = model.fit(X_train, Y_train, epochs=5,batch_size=64,verbose=1, validation_data=(X_test, Y_test))
    print(convolutional_model.score(X_train,Y_train))
    model.summary()
    return …
Run Code Online (Sandbox Code Playgroud)

python numpy attributeerror sequential conv-neural-network

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