Ning-Ding / Implementation-CVPR2015-CNN-for-ReID

Implementation for CVPR 2015 Paper: "An Improved Deep Learning Architecture for Person Re-Identification".
MIT License
147 stars 71 forks source link

TypeError: get_updates() missing 1 required positional argument: 'constraints' #33

Open wanfb opened 6 years ago

wanfb commented 6 years ago

Dear author, I came across a problem while compiling your code. I ran " python main.py --dataset cuhk-03.h5, to get the following error. A lot of efforts were paid to solve the problem but I still can't figure it out. Could you please give me some help?

F:\Users\wanfb\Documents\Implementation-CVPR2015-CNN-for-ReID-master\CUHK03>python main.py --dataset cuhk-03.h5 Using TensorFlow backend.


Layer (type) Output Shape Param # Connected to

input_1 (InputLayer) (None, 160, 60, 3) 0


conv2d_1 (Conv2D) (None, 156, 56, 20) 1520 input_1[0][0] input_2[0][0]


max_pooling2d_1 (MaxPooling2D) multiple 0 conv2d_1[0][0] conv2d_1[1][0] conv2d_2[0][0] conv2d_2[1][0] conv2d_5[0][0] conv2d_6[0][0]


input_2 (InputLayer) (None, 160, 60, 3) 0


conv2d_2 (Conv2D) (None, 74, 24, 25) 12525 max_pooling2d_1[0][0] max_pooling2d_1[1][0]


lambda_1 (Lambda) (None, 185, 60, 25) 0 max_pooling2d_1[2][0] max_pooling2d_1[3][0]


up_sampling2d_1 (UpSampling2D) (None, 185, 60, 25) 0 max_pooling2d_1[2][0] max_pooling2d_1[3][0]


lambda_2 (Lambda) (None, 185, 60, 25) 0 lambda_1[0][0] lambda_1[1][0]


add_1 (Add) (None, 185, 60, 25) 0 up_sampling2d_1[0][0] lambda_2[1][0]


add_2 (Add) (None, 185, 60, 25) 0 up_sampling2d_1[1][0] lambda_2[0][0]


conv2d_3 (Conv2D) (None, 37, 12, 25) 15650 add_1[0][0]


conv2d_4 (Conv2D) (None, 37, 12, 25) 15650 add_2[0][0]


conv2d_5 (Conv2D) (None, 35, 10, 25) 5650 conv2d_3[0][0]


conv2d_6 (Conv2D) (None, 35, 10, 25) 5650 conv2d_4[0][0]


concatenate_1 (Concatenate) (None, 17, 5, 50) 0 max_pooling2d_1[4][0] max_pooling2d_1[5][0]


flatten_1 (Flatten) (None, 4250) 0 concatenate_1[0][0]


dense_1 (Dense) (None, 500) 2125500 flatten_1[0][0]


dense_2 (Dense) (None, 2) 1002 dense_1[0][0]

Total params: 2,183,147 Trainable params: 2,183,147 Non-trainable params: 0


Model Compile Successful. number 0 in 100 start model.fit_generator Traceback (most recent call last): File "main.py", line 108, in main(args.dataset_path) File "main.py", line 24, in main train(model, dataset_path) File "main.py", line 49, in train model.fit_generator(Data_Generator.flow(f,flag = flag_train),one_epoch,epoch_num,validation_data=Data_Generator.flow(f,train_or_validation=which_v al_data,flag=flag_val),validation_steps=nb_val_samples, workers=1) File "C:\ProgramData\Anaconda3\lib\site-packages\keras\legacy\interfaces.py", line 87, in wrapper return func(*args, **kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py", line 1961, in fit_generator self._make_train_function() File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py", line 990, in _make_train_function loss=self.total_loss) TypeError: get_updates() missing 1 required positional argument: 'constraints'

RQuispeC commented 6 years ago

Dear all, I am having the same problem, I found this https://github.com/the-moliver/kfs/issues/17 and seems to be a problem related with keras version, I have also try some solutions based on it but none works

Phoebe-star commented 6 years ago

I use keras 2.0.0 , it can work, but use keras 2.0.8 can not work

RQuispeC commented 6 years ago

Thanks @Phoebe-star ! it is working now :D

qiaoguan commented 6 years ago

i also use keras 2.0.8, there also some wrong, e.g. TypeError: get_updates() so i change the function in get_updates in model.py to this:

def get_updates(self, loss,params): grads = self.get_gradients(loss, params) self.updates = []

        lr = self.lr
        if self.inital_decay > 0:
            lr *= (1. / (1. + self.decay * self.iterations)) ** 0.75
            self.updates .append(K.update_add(self.iterations, 1))

        # momentum
        shapes = [K.get_variable_shape(p) for p in params]
        moments = [K.zeros(shape) for shape in shapes]
        self.weights = [self.iterations] + moments
        for p, g, m in zip(params, grads, moments):
            v = self.momentum * m - lr * g  # velocity
            self.updates.append(K.update(m, v))

            if self.nesterov:
                new_p = p + self.momentum * v - lr * g
            else:
                new_p = p + v

            # apply constraints
            if getattr(p, 'constraint', None) is not None:
                new_p = p.constraint(new_p)

            self.updates.append(K.update(p, new_p))
        return self.updates 

and finally it work

Geek-Peng commented 6 years ago

@qiaoguan I'v used your method ,but ir raised a new Error, File "F:/CVPR2015-CNN for P Re-id/Implementation-CVPR2015-CNN-for-ReID-master/CUHK03/main.py", line 48, in train nb_val_samples=nb_val_samples)

File "E:\Anaconda\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper return func(*args, **kwargs)

File "E:\Anaconda\lib\site-packages\keras\engine\training.py", line 2192, in fit_generator generator_output = next(output_generator)

File "E:\Anaconda\lib\site-packages\keras\utils\data_utils.py", line 584, in get six.raise_from(StopIteration(e), e)

File "", line 3, in raise_from

StopIteration.

keras version is 2.1.5 tensorflow-gpu 1.7 python 3.5.2

It seems that , the generator can not iterate.Can you give me some suggests?Thank you so much!

developer88 commented 4 years ago

Works for me only with

print(tf.__version__) # 1.1.0 only
print(keras.__version__) # 2.0.5 only