xmwr1689 2023-05-01 10:25 采纳率: 0%
浏览 51
已结题

关于#神经网络#的问题,如何解决?

问题遇到的现象和发生背景

神经网络与深度学习案例与实践邱锡鹏5.1.5使用卷积运算完成图像边缘检测任务原书代码在Windows中运行错误但在Ubuntu中可以运行
Windows中的运行结果:

img

操作环境、软件版本等信息

Windows11
pycharm
anaconda
python 3.9
paddle 2.2.2(cpu gpu两个版本都试了)
numpy 1.24.3或1.23.4
scikit-learn 1.2.2
matplotlib3.7.1
######
Ubuntu20.04
pycharm
anaconda
python 3.9
paddle 2.2.2 cpu版本
numpy 1.23.4
scikit-learn 1.2.2
matplotlib 3.7.1

源码:

import paddle
import paddle.nn as nn

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np


class Conv2D(nn.Layer):
    def __init__(self, kernel_size, stride=1, padding=0,
                 weight_attr=paddle.ParamAttr(initializer=nn.initializer.Constant(value=1.0))):
        super(Conv2D, self).__init__()
        self.weight = paddle.create_parameter(shape=[kernel_size, kernel_size],
                                              dtype='float32',
                                              attr=weight_attr)
        # 步长
        self.stride = stride
        # 零填充
        self.padding = padding

    def forward(self, X):
        # 零填充
        new_X = paddle.zeros([X.shape[0], X.shape[1] + 2 * self.padding, X.shape[2] + 2 * self.padding])
        new_X[:, self.padding:X.shape[1] + self.padding, self.padding:X.shape[2] + self.padding] = X
        u, v = self.weight.shape
        output_w = (new_X.shape[1] - u) // self.stride + 1
        output_h = (new_X.shape[2] - v) // self.stride + 1
        output = paddle.zeros([X.shape[0], output_w, output_h])
        for i in range(0, output.shape[1]):
            for j in range(0, output.shape[2]):
                output[:, i, j] = paddle.sum(
                    new_X[:, self.stride * i:self.stride * i + u, self.stride * j:self.stride * j + v] * self.weight,
                    axis=[1, 2])
        return output


# 读取图片
img = Image.open('./number.jpg').resize((256, 256))
plt.figure(figsize=(8, 4))
plt.imshow(img)
plt.show()

# 设置卷积核参数
w = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')
# 创建卷积算子,卷积核大小为3x3,并使用上面的设置好的数值作为卷积核权重的初始化参数
conv = Conv2D(kernel_size=3, stride=1, padding=0,
              weight_attr=paddle.ParamAttr(initializer=nn.initializer.Assign(value=w)))

# 将读入的图片转化为float32类型的numpy.ndarray
inputs = np.array(img).astype('float32')
print("bf to_tensor, inputs:", inputs)
# 将图片转为Tensor
inputs = paddle.to_tensor(inputs)
print("bf unsqueeze, inputs:", inputs)
inputs = paddle.unsqueeze(inputs, axis=0)
print("af unsqueeze, inputs:", inputs)
outputs = conv(inputs)
# outputs = paddle.squeeze(outputs, axis=0)
outputs = outputs.numpy()
# 可视化结果
plt.figure(figsize=(8, 4))
f = plt.subplot(121)
f.set_title('input image', fontsize=15)
plt.imshow(img)
f = plt.subplot(122)
f.set_title('output feature map', fontsize=15)
plt.imshow(outputs.squeeze(), cmap='gray')
plt.savefig('conv-vis.pdf')
plt.show()

尝试过的解决方法

根据退出代码在网上找说是栈溢出,尝试过网上的方法没用,又试了不同版本的包也没用

我想要达到的结果

正常运行显示
Ubuntu虚拟机:

img

  • 写回答

2条回答 默认 最新

  • 关注
    获得3.75元问题酬金

    windows下报啥错,你要把报错信息贴出来给看看啊

    评论

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 修改了问题 5月8日
  • 赞助了问题酬金15元 5月8日
  • 创建了问题 5月1日

悬赏问题

  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi