RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-578893

Mixadyt's questions

Martin Hope
Mixadyt
Asked: 2024-12-19 01:18:18 +0000 UTC

如何识别该图像中的物体?

  • 6

我有图像, 例如。但所有图像的大小都调整为 120x80。我需要识别图像中的内容:数字(1 到 9)或字母(完整英文字母表)。但我的模型没有学习。它只是在错误〜3.6处停止(CrossEntropyLoss,35个类)。

然后我尝试查看每层之后输出的图像,并且在块 3 之后(参见下面的模型)它们绝对相同(有孤立的例外),仅保留白色背景。我的对象(数字/字母)没有进入下一层。我尝试增加 Conv2d 内核的大小,减少过滤器的数量,但它不起作用。

更改:我使用 pytorch。在训练期间,Adam 优化器使用 lr = 0.001,batch_size 尝试了 32、64 - 两者都不起作用。数据集分为 20% - 验证集,80% - 训练集。我尝试训练 100 和 500 epoch,结果是相同的:(培训计划蓝色 - 训练集,黄色 - 验证集)。

训练代码:

from torch.utils.data import DataLoader, random_split
from torch.nn import CrossEntropyLoss
from torch.optim import Adam
from torchvision import transforms
import matplotlib.pyplot as plt

from dataset.dataset import CellsDataset
from model import RecognitionModel

batch_size = 32
epochs = 100
lr = 0.001

transform = transforms.Compose([
    transforms.Resize((80, 120)),  # Изменение размера изображений
    # transforms.RandomHorizontalFlip(),  # Случайное горизонтальное отражение
    # transforms.RandomRotation(20),  # Случайное вращение на 20 градусов
    # transforms.RandomAffine(degrees=15, translate=(0.1, 0.1)),  # Случайная аффинная трансформация
    transforms.Grayscale(),
    transforms.ToTensor(),  # Преобразование в тензор
])

dataset = CellsDataset(transform)

train_dataset, valid_dataset = random_split(dataset, [0.8, 0.2])
train_dataloader = DataLoader(train_dataset, batch_size = batch_size, shuffle = True)
valid_dataloader = DataLoader(valid_dataset, batch_size = batch_size, shuffle = True)

model = RecognitionModel()

loss_func = CrossEntropyLoss()
optimizer = Adam(model.parameters(), lr = lr)

train_losses = []
valid_losses = []

for i in range(epochs):
    # Train
    optimizer.zero_grad()
    image, label = next(iter(train_dataloader))

    pred = model(image)
    loss = loss_func(pred, label)
    train_losses.append(loss.item())

    # Validation
    image, label = next(iter(valid_dataloader))

    pred = model(image)
    loss_ = loss_func(pred, label)
    valid_losses.append(loss_.item())

    # Backward

    loss.backward()
    optimizer.step()

    print(f"Epoch {i+1}/{epochs} Loss {loss.item()} Validation loss {loss_.item()}")

型号代码:

import torch
from torch.nn import Module, Conv2d, MaxPool2d, ReLU, AdaptiveMaxPool2d, Linear, LeakyReLU, Softmax

class CNNBlock(Module):
    def __init__(self, in_channels, out_channels):
        super().__init__()
        self.conv = Conv2d(
            in_channels = in_channels,
            out_channels = out_channels,
            kernel_size = 5,
            padding = "same"
        )
        self.act = ReLU()
        self.maxpool = MaxPool2d(
            kernel_size = 2,
            stride = 2
        )

    def forward(self, x):
        return self.maxpool(self.act(self.conv(x)))

class RecognitionModel(Module):
    def __init__(self):
        super().__init__()
        
        self.block1 = CNNBlock(1, 32)
        self.block2 = CNNBlock(32, 64)
        self.block3 = CNNBlock(64, 128)
        self.block4 = CNNBlock(128, 256)
        self.conv1 = Conv2d(
            in_channels = 256,
            out_channels = 512,
            kernel_size = 3
        )
        self.act1 = ReLU()
        self.conv2 = Conv2d(
            in_channels = 512,
            out_channels = 1024,
            kernel_size = 3
        )
        self.act2 = ReLU()
        self.globalmaxpool = AdaptiveMaxPool2d(output_size = 1)

        self.sqz = lambda x: x.squeeze()
        self.linear1 = Linear(
            in_features = 1024,
            out_features = 512
        )
        self.act3 = LeakyReLU()
        self.linear2 = Linear(
            in_features = 512,
            out_features = 256
        )
        self.act4 = LeakyReLU()
        self.linear3 = Linear(
            in_features = 256,
            out_features = 128
        )
        self.act5 = LeakyReLU()
        self.linear4 = Linear(
            in_features = 128,
            out_features = 64
        )
        self.act6 = LeakyReLU()
        self.linear5 = Linear(
            in_features = 64,
            out_features = 35
        )
        self.act7 = Softmax()

    def forward(self, x):
        x = self.block1(x)
        x = self.block2(x)
        x = self.block3(x)
        x = self.block4(x)
        x = self.act1(self.conv1(x))
        x = self.act2(self.conv2(x))
        x = self.globalmaxpool(x)
        x = self.sqz(x)
        x = self.act3(self.linear1(x))
        x = self.act4(self.linear2(x))
        x = self.act5(self.linear3(x))
        x = self.act6(self.linear4(x))
        y = self.act7(self.linear5(x))

        return y

组装数据集的代码:

import json
import torch
from torch.utils.data import Dataset
from PIL import Image

class CellsDataset(Dataset):
    def __init__(self, transform):
        self.classes = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        self.transform = transform

        with open("dataset/labels.json", 'r') as labels:
            self.labels = json.load(labels)

    def __len__(self):
        return len(self.labels)

    def __getitem__(self, index: int):
        image_path = "dataset/images/" + self.labels[index]["image"]
        
        label = self.labels[index]["choice"]
        label_index = self.classes.index(label.upper())
        label_hot_encoding = torch.zeros(len(self.classes))
        label_hot_encoding[label_index] = 1

        image = Image.open(image_path)
        return self.transform(image), label_hot_encoding

我还可以添加第 1 层的随机内核: 1层芯

нейронные-сети
  • 1 个回答
  • 37 Views
Martin Hope
Mixadyt
Asked: 2024-02-15 22:39:08 +0000 UTC

我提交了 720x1280x3 的图像,模型接受 Nonex1280x3 Keras

  • 5

我的型号:

self.model = Sequential()
        self.model.add(Lambda(lambda x: print(x.shape)))
        self.model.add(InputLayer(input_shape=(720, 1280, 3)))
        self.model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
        self.model.add(Conv2D(64, (3, 3), activation='relu', padding='same', strides=2))
        self.model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
        self.model.add(Conv2D(128, (3, 3), activation='relu', padding='same', strides=2))
        self.model.add(Conv2D(256, (3, 3), activation='relu', padding='same'))
        self.model.add(Conv2D(256, (3, 3), activation='relu', padding='same', strides=2))
        self.model.add(Conv2D(512, (3, 3), activation='relu', padding='same'))
        self.model.add(Conv2D(256, (3, 3), activation='relu', padding='same'))
        self.model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
        self.model.add(UpSampling2D((2, 2)))
        self.model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
        self.model.add(UpSampling2D((2, 2)))
        self.model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
        self.model.add(Conv2D(2, (3, 3), activation='sigmoid', padding='same'))
        self.model.add(UpSampling2D((2, 2)))

        self.model.compile(optimizer="adam", loss="mse")

我在一开始就添加了Lambda来获取输入维度。这就是我的预测方式:

print(image.shape)
self.model.predict(image)

一开始运行程序后我得到:

(720, 1280, 3)
(None, 1280, 3)
(None, 1280, 3)

然后是错误:

Traceback (most recent call last):
  File "C:\Users\Амаль\PreviuMaker\resizer\main.py", line 12, in <module>
    print(resizer.predict(image))
  File "C:\Users\Амаль\PreviuMaker\resizer\Model.py", line 32, in predict
    return self.model.predict(image)
  File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\utils\traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "C:\Users\5C61~1\AppData\Local\Temp\__autograph_generated_fileo1wmzcyg.py", line 15, in tf__predict_function
    retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
TypeError: in user code:

    File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2416, in predict_function  *
        return step_function(self, iterator)
    File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2401, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2389, in run_step  **
        outputs = model.predict_step(data)
    File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\training.py", line 2357, in predict_step
        return self(x, training=False)
    File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\utils\traceback_utils.py", line 70, in error_handler
        raise e.with_traceback(filtered_tb) from None
    File "C:\Users\Амаль\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\src\engine\input_spec.py", line 213, in assert_input_compatibility
        raise TypeError(

    TypeError: Exception encountered when calling layer 'sequential' (type Sequential).

    Inputs to a layer should be tensors. Got 'None' (of type <class 'NoneType'>) as input for layer 'conv2d'.

    Call arguments received by layer 'sequential' (type Sequential):
      • inputs=tf.Tensor(shape=(None, 1280, 3), dtype=float32)
      • training=False
      • mask=None

你能告诉我可能是什么问题吗?

python
  • 1 个回答
  • 13 Views
Martin Hope
Mixadyt
Asked: 2024-02-01 03:40:22 +0000 UTC

为什么更改recycleriew中的edittext会更改其他3个?

  • 5

我编写了一段代码,实际上应该保存位于 recyclerview 中的 edittext 中的值:

@Override
    public void onBindViewHolder(@NonNull NewRoomViewHolder holder, @SuppressLint("RecyclerView") int position) {
        holder.newRoomText.setText(newRooms.get(position).getText());

        holder.newRoomCount.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                onEditTextChanged(position, s.toString());
                Toast toast = Toast.makeText(context,
                        String.valueOf(position), Toast.LENGTH_LONG);
                toast.show();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }
    public void onEditTextChanged(int position, String charSeq) {
        if (!Objects.equals(charSeq, "")) {
            widgets.put("widget" + String.valueOf(position + 1), Integer.parseInt(charSeq));
        }
    }

然而,一些编辑文本已更新。将解释:

当用户在位置 1 的 edittext 中输入值时,onTextChanged函数会在以下位置调用:11, 14, 1(总共 15 个 edittext)。正确的位置总是最后出现的。那些。它不是将 1 中的值保存到列表中,而是保存 11、14。

有没有什么办法解决这一问题?

java
  • 1 个回答
  • 34 Views
Martin Hope
Mixadyt
Asked: 2024-01-28 03:44:18 +0000 UTC

如何从recyclerView中的editText获取文本?

  • 5

我有一个 ID 为 widgetCount 的 editText,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/newRoomLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/widgetName"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="5"
        android:fontFamily="@font/montserrat_bold"
        android:textSize="25sp"
        android:text="@string/app_name" />

    <EditText
        android:id="@+id/widgetCount"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_gravity="end"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:gravity="center"
        android:autofillHints="name"
        android:text="@string/count_default"
        android:hint="@string/count_hint"
        android:inputType="number" />
</LinearLayout>

这是插入到回收器视图中的块。问题本身:如何从 edittext 获取文本?

回调不适合我。我尝试了一下,因为每个人都说英语。堆栈溢出版本:

for (int i = 0; i < newRoomRecycler.getAdapter().getItemCount();i++) {
    View view = newRoomRecycler.getChildAt(i);
    EditText widgetCount = view.findViewById(R.id.widgetCount);
}

但是,第 2 行有错误:

attempt to invoke virtual method 'android.view.View android.view.View.findViewByid(int)' on a null object reference

适配器:

public class NewRoomAdapter extends RecyclerView.Adapter<NewRoomAdapter.NewRoomViewHolder> {

    private final Context context;
    private final List<NewRoom> newRooms;

    public NewRoomAdapter(Context context, List<NewRoom> newRooms) {
        this.context = context;
        this.newRooms = newRooms;
    }

    @NonNull
    @Override
    public NewRoomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View newRoomItems = LayoutInflater.from(context).inflate(R.layout.new_room_block, parent, false);
        return new NewRoomViewHolder(newRoomItems);
    }

    @Override
    public void onBindViewHolder(@NonNull NewRoomViewHolder holder, @SuppressLint("RecyclerView") int position) {
        holder.newRoomText.setText(newRooms.get(position).getText());
    }

    @Override
    public int getItemCount() {
        return newRooms.size();
    }

    public static final class NewRoomViewHolder extends RecyclerView.ViewHolder {

        private final TextView newRoomText;

        public NewRoomViewHolder(@NonNull View itemView) {
            super(itemView);

            newRoomText = itemView.findViewById(R.id.widgetName);
        }
    }

}

这是适配器传递到回收器视图的方式:

private void setNewRoomRecycler(List<NewRoom> newRoomList) {
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);

        newRoomRecycler = findViewById(R.id.newRoomRecycler);
        newRoomRecycler.setLayoutManager(layoutManager);

        newRoomAdapter = new NewRoomAdapter(this, newRoomList);
        newRoomRecycler.setAdapter(newRoomAdapter);
    }

我读到了有关该错误的信息,在解决方案中他们说该对象根本不存在。

请帮帮我!

java
  • 1 个回答
  • 27 Views
Martin Hope
Mixadyt
Asked: 2023-12-29 19:27:05 +0000 UTC

如何扩展 os python 中的最大命令大小?

  • 5

要在应用程序启动时启动窗口,我使用此命令:os.system('команда'),但我的命令对于 cmd 来说显然太大,它根本没有插入到末尾。因此该命令不会被执行。子流程库也是如此。是否有可能以某种方式绕过这个限制?

该命令是一个命令powershell -enc和一个以base64编码的长代码。经过一番挖掘,我发现 powershell 中没有这样的限制,但我不知道如何在 os/subprocess 中运行它(powershell 命令自然没有帮助)。

这是包装代码本身:

with open("data/cmd_to_exe.py", 'w+', encoding='utf-8') as prepairing:
    prepairing.write('import os\n')
    for code in codes:
        prepairing.write(f'os.system("{code[0:-1]}")\n')

PS这段代码后来被转换成exe,所以我把所有东西都写到一个文件中,但事实上,一切都按照编译器的要求工作。

python
  • 1 个回答
  • 37 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5