希望做一个几何图形参数化的工作但是报错
lujuudjk 发布于2019-05 浏览:1102 回复:2
0
收藏

使用paddle做图形几何参数化的工作,但是报错了,因为是新手,不知道具体错在哪,报错如下,希望各位不吝赐教

Enforce failed. Expected x_dims[i + axis] == y_dims[i], but received x_dims[i + axis]:12 != y_dims[i]:4.
Broadcast dimension mismatch. at [/paddle/paddle/fluid/operators/elementwise/elementwise_op_function.h:63]

输入量是图片,输出量是一个包含54个y坐标的一维数组。

神经网络代码如下

def deep_network(img):
conv_pool_1 = fluid.nets.simple_img_conv_pool(
input=img,
filter_size=3,
num_filters=32,
pool_size=2,
pool_stride=2,
act='relu')
conv_pool_1 = fluid.layers.batch_norm(conv_pool_1)
conv_pool_2 = fluid.nets.simple_img_conv_pool(
input=conv_pool_1,
filter_size=3,
num_filters=32,
pool_size=2,
pool_stride=2,
act='relu')
conv_pool_2 = fluid.layers.batch_norm(conv_pool_2)
conv_pool_3 = fluid.nets.simple_img_conv_pool(
input=conv_pool_2,
filter_size=3,
num_filters=64,
pool_size=2,
pool_stride=2,
act='relu')
conv_pool_3 = fluid.layers.batch_norm(conv_pool_3)
conv_pool_4 = fluid.nets.simple_img_conv_pool(
input=conv_pool_3,
filter_size=3,
num_filters=64,
pool_size=2,
pool_stride=2,
act='relu')
conv_pool_4 = fluid.layers.batch_norm(conv_pool_4)
conv_pool_5 = fluid.nets.simple_img_conv_pool(
input=conv_pool_4,
filter_size=3,
num_filters=128,
pool_size=2,
pool_stride=2,
act='relu')
conv_pool_5 = fluid.layers.batch_norm(conv_pool_5)
encode_hidden_1 = fluid.layers.fc(input=conv_pool_5, size=100, act='tanh')
encode_hidden_2 = fluid.layers.fc(input=encode_hidden_1, size=100, act='tanh')
encode_hidden_3 = fluid.layers.fc(input=encode_hidden_2, size=100, act='tanh')
code_para_16 = fluid.layers.fc(input=encode_hidden_3, size=16, act='tanh')
decode_hidden_1 = fluid.layers.fc(input=code_para_16, size=100, act='tanh')
decode_hidden_2 = fluid.layers.fc(input=decode_hidden_1, size=100, act='tanh')
decode_hidden_3 = fluid.layers.fc(input=decode_hidden_2, size=100, act='tanh')
output = fluid.layers.fc(input=decode_hidden_3, size=54, act=None)
return output

def train_program():
image = fluid.layers.data(name='image', shape=[1, 224, 224], dtype='float32')
label = fluid.layers.data(name='label', shape=[54], dtype='float32')
predict = deep_network(image)
cost = fluid.layers.square_error_cost(input=predict, label=label)
avg_cost = fluid.layers.mean(cost)
return predict, avg_cost


# 配置优化器
def optimizer_program():
return fluid.optimizer.Adam(learning_rate=2.5e-5)


# 配置机器学习网络
# 训练场所
place = fluid.CPUPlace()
# 输入数据层配置
blade_img = fluid.layers.data(name='image', shape=[1, 224, 224], dtype='float32')
y_label = fluid.layers.data(name='label', shape=[54], dtype='float32')
# 输出数据配置,调用训练程序
prediction, avg_loss = train_program()
# 告知网络传入的数据分为两部分,第一部分是img值,第二部分是label值
feeder = fluid.DataFeeder(feed_list=[blade_img, y_label], place=place)
# 优化器调用
optimizer = optimizer_program()
optimizer.minimize(avg_loss)

图像预处理代码

def train_mapper(train_sample):
img, label = train_sample
# 进行图片的读取,由于数据集的像素维度各不相同(图片大小不同),需要进一步处理对图像进行变换
img = paddle.dataset.image.load_image(img)
# 对图片进行简单的图像裁剪和变换,输出维度为(1,224,224)
img = paddle.dataset.image.simple_transform(
im=img,
resize_size=224,
crop_size=224,
is_train=True,
is_color=False)
# 将img数组进行进行归一化处理,得到0到1之间的数值,255是灰度的最大值
img = img.flatten().astype('float32') / 255.0
return img, label


def train_data_reader(train_sample, buffered_size=1024):
def reader():
for s in train_sample:
img_path, label = s
yield img_path, np.array(label).astype('float32')

# xmap_readers是一个reader装饰器,功能是将图片和图片路径对应合并为一个reader
return paddle.reader.xmap_readers(train_mapper, reader, cpu_count(), buffered_size)

收藏
点赞
0
个赞
共2条回复 最后由lujuudjk回复于2019-05
#3lujuudjk回复于2019-05
#2 用户已被禁言回复
你这个是paddle? 模块貌似发错了哦。图像识别模块是特指百度ai网站的图像识别相关接口问题可以发在这里。
展开

啊,抱歉,谢谢提醒。话说这个能删帖么,尴尬

0
#2用户已被禁言回复于2019-05

你这个是paddle?

模块貌似发错了哦。图像识别模块是特指百度ai网站的图像识别相关接口问题可以发在这里。

1
TOP
切换版块