我们想在visualdl中输出模型结构,但一直报错,直接使用官方提供的示例也一样出错,哪位大牛能否帮忙看一下,谢谢!
## 以下代码中有写下相关注释,即时尝试一个线性回归的简单模型,也一样出错
import numpy as np
import paddle
import paddle.nn as nn
import paddle.optimizer as opt
from paddle.static import InputSpec
from visualdl import LogWriter
BATCH_SIZE = 16
BATCH_NUM = 4
EPOCH_NUM = 4
IMAGE_SIZE = 784
CLASS_NUM = 10
writer = LogWriter(logdir="./log/graph_test02/")
# define a random dataset
class RandomDataset(paddle.io.Dataset):
def __init__(self, num_samples):
self.num_samples = num_samples
def __getitem__(self, idx):
image = np.random.random([IMAGE_SIZE]).astype('float32')
label = np.random.randint(0, CLASS_NUM - 1, (1, )).astype('int64')
return image, label
def __len__(self):
return self.num_samples
class LinearNet(nn.Layer):
def __init__(self):
super(LinearNet, self).__init__()
self._linear = nn.Linear(IMAGE_SIZE, CLASS_NUM)
def forward(self, x):
return self._linear(x)
def train(layer, loader, loss_fn, opt):
for epoch_id in range(EPOCH_NUM):
for batch_id, (image, label) in enumerate(loader()):
out = layer(image)
loss = loss_fn(out, label)
loss.backward()
opt.step()
opt.clear_grad()
print("Epoch {} batch {}: loss = {}".format(
epoch_id, batch_id, np.mean(loss.numpy())))
# create network
layer = LinearNet()
loss_fn = nn.CrossEntropyLoss()
adam = opt.Adam(learning_rate=0.001, parameters=layer.parameters())
# create data loader
dataset = RandomDataset(BATCH_NUM * BATCH_SIZE)
loader = paddle.io.DataLoader(dataset,
batch_size=BATCH_SIZE,
shuffle=True,
drop_last=True,
num_workers=2)
# train
train(layer, loader, loss_fn, adam)
# save
path = "example.dy_model/linear"
paddle.jit.save(
layer=layer,
path=path,
input_spec=[InputSpec(shape=[None, 784], dtype='float32')])
writer.add_graph(model=layer, input_spec=[paddle.static.InputSpec(shape=[None, 784], dtype='float32')], verbose=False)
writer.close()
## 报错同样发生在这里
writer.add_graph(model=layer, input_spec=[paddle.static.InputSpec(shape=[None, 784], dtype='float32')], verbose=False)
报错时,运行中的代码如下:
import paddle
from paddle import Tensor
import paddle.fluid as fluid
from typing import *
import numpy as np
def forward(self, x):
return paddle.jit.dy2static.convert_call(self._linear)(x)
此內容为paddle运行过程中产生,此外报错并非发生在训练过程中,而是单纯发生在add_graph的方法上。
补充报错截图,谢谢!
去提issue啊,让他们修