ageron / ageron/handson-ml2

[Chapter 14] ResidualUnit

Aberta
#320 3 comentários 0 reações 0 responsáveis Ver no GitHub
enhancement
Linguagem predominante
Jupyter Notebook
Estrelas
30k
Forks
13.1k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

I would like to implement a clean custom residual unit. Aurélien provides this one:

```
from tensorflow import keras
from functools import partial

DefaultConv2D = partial(keras.layers.Conv2D, kernel_size=3, strides=1, padding="SAME", use_bias=False)

class ResidualUnit(keras.layers.Layer):
def __init__(self, filters, strides=1, activation="relu", **kwargs):
super().__init__(**kwargs)

self.activation = keras.activations.get(activation)

self.main_layers = [
DefaultConv2D(filters, strides=strides),
keras.layers.BatchNormalization(),
self.activation,
DefaultConv2D(filters),
keras.layers.BatchNormalization()
]

self.skip_layers = []
if strides > 1:
self.skip_layers = [
DefaultConv2D(filters, kernel_size=1, strides=strides),
keras.layers.BatchNormalization()
]

def call(self, inputs):
Z = inputs
for layer in self.main_layers:
Z = layer(Z)
skip_Z = inputs
for layer in self.skip_layers:
skip_Z = layer(skip_Z)
return self.activation(Z + skip_Z)
```

The issue with this custom layer is there are no get_config() method.

I tried to implement one:

```
class ResidualUnit(keras.layers.Layer):
[...]

def get_config(self):
base_config = super().get_config()
return {**base_config,
"main_layers": self.main_layers,
"skip_layers": self.skip_layers,
"activation": self.activation}
```

But when I call the get_config method I have an error message : TypeError: can't pickle _thread.RLock objects.

Can someone help me with this ?

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.