ageron / ageron/handson-ml2

[Chapter 14] ResidualUnit

Abierto
#320 3 comentarios 0 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
Jupyter Notebook
Estrellas
30k
Forks
13.1k
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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 ?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.