【发布时间】:2017-12-06 18:13:22
【问题描述】:
我想定义 lambda 层以将特征与叉积相结合,然后合并这些模型,如图所示。 ,我该怎么办?
测试model_1,得到128维形式dense,使用pywt得到两个64维特征(cA,cD),然后返回cA*cD //当然我想合并两个模型,但是先试试model_1。
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))
抱歉,我可以问一个关于张量的问题吗?
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)
没错!然而,
from keras import backend as K
import numpy as np
kvar=K.variable(np.array([[1,2],[3,4]]))
K.eval(kvar)
print(kvar)
我得到了<CudaNdarrayType(float32, matrix)> 和kvar.eval() 我得到了b'CudaNdarray([[ 1. 2.]\n [ 3. 4.]])'。我用的是keras,那么如何使用keras得到像tensorflow这样的数组呢?
【问题讨论】:
-
因此,keras lambda 函数需要所有操作才能使用“张量”。常用操作都列在keras.io/backend中。您必须找到一种以张量方式重写 pywt.dwt 的方法。不幸的是,这不是一件容易的事。我认为这个问题很重要,我无法正确回答。
-
lambda 层是否必须使用 keras 后端功能?我可以将张量转换为数组然后使用pywt.dwt,然后将数组转换为张量吗?
-
有可能,但这会打断“图表”并带来错误。要转换数组中的张量,请使用“tensorVar.eval()”。要从数组创建张量,请使用“K.variable(arrayVar)”,其中 K 是 keras.backend。
-
非常感谢!我试试看
-
试试
karr = kvar.eval()
标签: python lambda keras-layer