Ich möchte Lambda-Layer definieren, um Features mit Cross-Produkt zu kombinieren, dann füge ich diese Modelle zusammen, genau wie die Abb. ,Was soll ich machen?Wie verwende ich Lambda-Layer in Keras?
-Test model_1, erhalten 128 Dimensionen dicht bilden, verwenden pywt
erhalten zwei 64 Dimensionen verfügen (cA,cD
), dann wieder KeyCA cD // ich natürlich zwei Modelle kombinieren wollen, aber versuchen model_1 zuerst.
from keras.models import Sequential,Model
from keras.layers import Input,Convolution2D,MaxPooling2D
from keras.layers.core import Dense,Dropout,Activation,Flatten,Lambda
import pywt
def myFunc(x):
(cA, cD) = pywt.dwt(x, 'db1')
# x=x*x
return cA*cD
batch_size=32
nb_classes=3
nb_epoch=20
img_rows,img_cols=200,200
img_channels=1
nb_filters=32
nb_pool=2
nb_conv=3
inputs=Input(shape=(1,img_rows,img_cols))
x=Convolution2D(nb_filters,nb_conv,nb_conv,border_mode='valid',
input_shape=(1,img_rows,img_cols),activation='relu')(inputs)
x=Convolution2D(nb_filters,nb_conv,nb_conv,activation='relu')(x)
x=MaxPooling2D(pool_size=(nb_pool,nb_pool))(x)
x=Dropout(0.25)(x)
x=Flatten()(x)
y=Dense(128,activation='relu')(x)
cross=Lambda(myFunc,output_shape=(64,))(y)
predictions=Dense(nb_classes,activation='softmax')(cross)
model = Model(input=inputs, output=predictions)
model.compile(loss='categorical_crossentropy',optimizer='adadelta',metrics=['accuracy'])
model.fit(X_train,Y_train,batch_size=batch_size,nb_epoch=nb_epoch,
verbose=1,validation_data=(X_test,Y_test))
Entschuldigung, kann ich eine Frage über Tensor stellen?
import tensorflow as tf
W1 = tf.Variable(np.array([[1,2],[3,4]]))
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
array = W1.eval(sess)
print (array)
Das stimmt! Allerdings
from keras import backend as K
import numpy as np
kvar=K.variable(np.array([[1,2],[3,4]]))
K.eval(kvar)
print(kvar)
Ich habe <CudaNdarrayType(float32, matrix)>
und kvar.eval()
Ich habe b'CudaNdarray([[ 1. 2.]\n [ 3. 4.]])'
. Ich benutze Keras, also wie bekomme ich Array wie Tensorflow mit Keras?
So Keras Lambda-Funktionen alle Operationen benötigen "Tensor" zu verwenden. Die allgemeinen Vorgänge sind in https://keras.io/backend/ aufgeführt. Sie müssen einen Weg finden, um pywt.dwt auf Tensor-Art umzuschreiben. Leider ist das keine leichte Aufgabe. Ich glaube, dass diese Frage sehr wichtig ist und ich kann sie nicht richtig beantworten. –
Muss die Lambda-Schicht die Keras-Backend-Funktion verwenden? Kann ich Tensor in ein Array transformieren, dann pywt.dwt verwenden und Array in Tensor umwandeln? –
Es ist möglich, aber das wird den "Graphen" unterbrechen und wird einen Fehler bringen. Um einen Tensor in einem Array zu konvertieren, verwenden Sie "tensorVar.eval()". Um einen Tensor aus einem Array zu erstellen, verwenden Sie "K.variable (arrayVar)", wobei K das keras.backend ist. –