В качестве примера я сделал небольшую модель. Он имеет небольшой слой, который использует переменную «num_features» для добавления в график. Оно работает. Если я добавлю регуляризатор (здесь он бесполезен, но был полезен в более крупной модели, которую я пытался реализовать), я получаю ошибку, но ошибка сообщает мне, что он потерял переменную «num_features».
Код: Выделить всё
!pip install --upgrade tensorflow
import tensorflow as tf
!pip install --upgrade keras
import os
import glob
import numpy as np
from tensorflow import data as tf_data
import keras
from keras import ops
from keras import layers
def subnet(inputs, num_features):
bias = keras.initializers.Constant(np.eye(num_features).flatten())
reg = keras.regularizers.OrthogonalRegularizer(factor=0.001, mode='rows')
x = layers.Dense(
num_features * num_features,
kernel_initializer="zeros",
bias_initializer=bias,
activity_regularizer=reg,
)(inputs)
return x
inputs = keras.Input(shape=(784,))
x = layers.Dense(64, activation="relu")(inputs)
x = subnet(x,8)
outputs = layers.Dense(10)(x)
model = keras.Model(inputs=inputs, outputs=outputs, name="example_model")
model.summary()
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255
model.compile(
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=keras.optimizers.RMSprop(),
metrics=["accuracy"],
)
history = model.fit(x_train, y_train, batch_size=64, epochs=2, validation_split=0.2)
Код: Выделить всё
TypeError Traceback (most recent call last)
in ()
10 )
11
---> 12 history = model.fit(x_train, y_train, batch_size=64, epochs=2, validation_split=0.2)
1 frames
/usr/local/lib/python3.10/dist-packages/keras/src/backend/tensorflow/numpy.py in eye(N, M, k, dtype)
2363 M = N
2364 # Making sure N, M and k are `int`
-> 2365 N, M, k = int(N), int(M), int(k)
2366 if k >= M or -k >= N:
2367 # tf.linalg.diag will raise an error in this case
TypeError: Exception encountered when calling Functional.call().
int() argument must be a string, a bytes-like object or a real number, not 'NoneType'
Arguments received by Functional.call():
• inputs=tf.Tensor(shape=(None, 784), dtype=float32)
• training=False
• mask=None
Подробнее здесь: https://stackoverflow.com/questions/787 ... iable-defi