MATLAB Answers

Can anyone help me in reshaping a fully connected layer output to a image?

53 views (last 30 days)
I am trying to make a deep layer network in which I want to connect my pretrained convolutional layer at the intermediate step? I am unable to write a custom layer for it. I am sharing the code for the custom layer, please le me know where am I going wrong in it.
classdef fullytandem < nnet.layer.Layer
properties
% (Optional) Layer properties
% Layer properties go here
end
properties (Learnable)
% (Optional) Layer learnable parameters
% Layer learnable parameters go here
W;
b;
Z;
end
methods
function layer = fullytandem(input_shape, output_shape, im_layer, name)
% (Optional) Create a myLayer
% This function must have the same name as the layer
% Layer constructor function goes here
layer.Name = name;
layer.Description = 'fully self';
layer.b = rand([im_layer,1]);
layer.W = rand([im_layer,input_shape]);
end
function Z = predict(layer, X)
load('net_28s11.mat')
% Forward input data through the layer at prediction time and
% output the result
%
% Inputs:
% layer - Layer to forward propagate through
% X - Input data
% Output:
% Z - Output of layer forward function
% Layer forward function for prediction goes here
disp('W')
size(layer.W)
disp('X')
size(X)
weights = layer.W;
bias = layer.b;
Y = fullyconnect(X,weights,bias,'DataFormat','SSCB');
% Z = layer.W*X + layer.b';
% disp(size(Z))
% outputSize = X.OutputSize;
disp('Y')
size(Y)
Z = reshape(Y, [4,7,1]);
disp('Z')
size(Z)
% Z = predict(net,dlarray(Z));
end
%
end
end

Accepted Answer

Srivardhan Gadila
Srivardhan Gadila on 2 Nov 2020
Instead of writing the code for fullyconnected layer you can make use of the existing fullyConnectedLayer & write the custom layer code only for the reshape operation as follows:
layers = [ ...
imageInputLayer([100 1 1],'Name','input','Normalization','none')
fullyConnectedLayer(100, 'Name','fc')
reshapeLayer("reshape")
convolution2dLayer(5,20,'Name','conv')];
dlnet = dlnetwork(layerGraph(layers));
analyzeNetwork(dlnet)
Custom layer code for reshape operation:
classdef reshapeLayer < nnet.layer.Layer
properties
end
properties (Learnable)
end
methods
function layer = reshapeLayer(name)
layer.Name = name;
end
function [Z] = predict(layer, X)
Z = reshape(X,10,10,1,[]);
end
end
end
  1 Comment
Aggraj  Gupta
Aggraj Gupta on 4 Nov 2020
Thanks alot for the answer, Srivardhan. I am still rusky on how to connect this reshape layer to the pretrained network? Say, I have a network saved in the .mat file. We can use this network as predict(net,XTest). How to add this pretrained network layers after the reshape layer?
Could you please guide me on the same?
Thanks again!

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!