Używam Keras z backendem TensorFlow do zbudowania i uruchomienia sieci neuronowej. Muszę użyć funkcji numpy na moim tensorze wyjściowym w funkcji utraty. Dokładniej, moja funkcja utraty obejmuje znalezienie najbliższych sąsiadów i muszę użyć do tego celu funkcjonalności Keras dla ckdTree. Próbowałem konwertować mój tensor wyjściowy do tablicy numpy przy użyciu K.eval()
. Jednak to powoduje błąd InvalidArgument
, gdy próbuję skompilować model, jak sądzę, ponieważ nie można uruchomić eval()
dla zmiennej symbolicznej.Jak korzystać z funkcji numpy na tensorze keras w funkcji loss?
Oto fragment kodu zabawki, który odtwarza ten błąd.
import numpy as np
from keras import backend as K
from keras.models import Sequential
from keras.layers.core import Flatten, Dense, Reshape
from keras.optimizers import Adam
def loss(y_true, y_pred):
y_pred_numpy = K.eval(y_pred)
# perform some numpy operations on y_pred_numpy
return K.constant(0)
''' Model '''
input_shape = (10,10,10,3)
train_images = np.zeros((1,10,10,10,3))
train_labels = np.zeros((1,1,1,1,3))
model = Sequential()
model.add(Flatten(input_shape=input_shape))
model.add(Dense(3000, use_bias=True, bias_initializer='zeros'))
model.add(Reshape((10,10,10,3)))
model.summary()
opt = Adam(lr=1E-4)
model.compile(optimizer=opt, loss=loss)
Powyższe daje następujący błąd:
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'flatten_3_input' with dtype float
[[Node: flatten_3_input = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
[[Node: reshape_3/Reshape/_11 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_20_reshape_3/Reshape", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
Jak więc mogę pracować z tensorów Keras bez konieczności przepisywania (kompleks) numpy funkcjonalności przy użyciu Keras?
Czy to naprawdę problem w funkcji utraty? Czy próbowałeś kompilacji z 'loss = 'mse''? - Chociaż nie jestem pewna, czy keras zaakceptuje odrętwienia z tensorami. :( –
Czy spojrzałeś na [to pytanie] (https://stackoverflow.com/questions/39921607/how-to-make-a-ustom-activation-function-with-only-python-in-tensorflow) już? –