当前位置: 首页 > 知识库问答 >
问题:

如果网络未按模型馈电,如何馈电。适合

毕瀚
2023-03-14

我在keras中有一个简单的网络,我定义了一个自定义层,该层对输入张量进行一些操作,然后将其返回到网络,但当我想要实现它时,它会产生以下错误,并表示输入尚未反馈,而我想当我们使用fit函数时,它会反馈网络。你能帮我解决这个问题吗?我找不到合适的答案来解决我的问题。我也把代码放在这里了。非常感谢。

def C(u):
    if u == 0:
        return 1. / np.sqrt(2.)
    else:
        return 1.

def DCT(a, b):
    for u in range(8):
        for v in range(8):
            for x in range(8):
                for y  in range(8):
                    b[u,v] = b[u, v] + 0.25 * C(u) * C(v) * a[x, y]* np.cos((2 * x+1) * (u) * np.pi / 16) * np.cos((2 * y+1) * (v) * np.pi / 16)

def IDCT(a, b):
    for u in range(8):
        for v in range(8):
            for x in range(8):
                for y  in range(8):
                    b[x,y] = b[x, y] + 0.25 * C(u) * C(v) * a[u,v] * np.cos((2 * x+1) * (u) * np.pi / 16) * np.cos((2 * y+1) * (v) * np.pi / 16)

def quntize_mask(window_size: int, keep_count: int):
    mask = np.zeros((window_size, window_size), dtype=np.uint8)

    index_order = sorted(((x, y) for x in range(window_size) for y in range(window_size)),
                         key=lambda p: (p[0] + p[1], -p[1] if (p[0] + p[1]) % 2 else p[1]))

    for i, j in index_order[0:keep_count]:
        mask[i, j] = 1
    return mask
def slicAndJpeg(img):
    for i in range (int(img.shape[1].value/8)):
        for j in range(int(img.shape[2].value/8)):
            temp=(img[:,i*8:i*8+8,j*8:j*8+8])
            tempb=np.zeros((8,8))
            DCT(temp,tempb)
            mask=quntize_mask(8,9)
            qunz=Kr.layers.multiply(mask,tempb)
            tempc=K.zeros((8,8))
            IDCT(qunz,tempc)
            img[:,i*8:i*8+8,j*8:j*8+8]=tempc

class JPEGLayer(Layer):

    def __init__(self,**kwargs):
        super(JPEGLayer, self).__init__(**kwargs)
        self.supports_masking = True
    def call(self, noised_image, training=True):
        def noise():
#            noised_image = noised_and_cover
            # pad the image so that we can do dct on 8x8 blocks
            pad_height = (8 - noised_image.shape[1] % 8) % 8
            pad_width = (8 - noised_image.shape[2] % 8) % 8

            noised_image_pad = Kr.layers.ZeroPadding2D(padding=(( pad_width, 0),( pad_height,0)))(noised_image)
            slicAndJpeg(K.eval(noised_image_pad))


        # un-pad
            noised_and_cover = noised_image_pad[ :, :noised_image_pad.shape[1]-pad_height, :noised_image_pad.shape[2]-pad_width]
            return noised_and_cover 
        return noise()

#-----------------building w train---------------------------------------------
wt_random=np.random.randint(2, size=(49999,4,4))
w_expand=wt_random.astype(np.float32)
wv_random=np.random.randint(2, size=(9999,4,4))
wv_expand=wv_random.astype(np.float32)
x,y,z=w_expand.shape
w_expand=w_expand.reshape((x,y,z,1))
x,y,z=wv_expand.shape
wv_expand=wv_expand.reshape((x,y,z,1))

#-----------------building w test---------------------------------------------
w_test = np.random.randint(2,size=(1,4,4))
w_test=w_test.astype(np.float32)
w_test=w_test.reshape((1,4,4,1))


#-----------------------encoder------------------------------------------------
#------------------------------------------------------------------------------
image = Input((28, 28, 1))
conv1 = Conv2D(64, (5, 5),activation='relu',padding='same', name='convl1e')(image)
wtm=Input((4,4,1))
#--------------------------------------------------------------
wpad=Kr.layers.Lambda(lambda xy: xy[0] + Kr.backend.spatial_2d_padding(xy[1], padding=((0, 24), (0, 24))))
encoded_merged=wpad([conv1,wtm])#-----------------------decoder------------------------------------------------
#------------------------------------------------------------------------------
decoded = Conv2D(1, (5, 5),activation='relu', padding='same', name='decoder_output')(encoded_merged) 
model=Model(inputs=[image,wtm],outputs=decoded)
model.summary()
decoded_noise=JPEGLayer()(decoded)#16

#----------------------w extraction------------------------------------
convw1 = Conv2D(64, (5,5),activation='relu' , name='conl1w')(decoded_noise)#24
convw2 = Conv2D(64, (5,5),activation='relu' , name='conl2w')(convw1)#20
#Avw1=AveragePooling2D(pool_size=(2,2))(convw2)
convw3 = Conv2D(64, (5,5),activation='relu' ,name='conl3w')(convw2)#16
convw4 = Conv2D(64, (5,5), activation='relu' ,name='conl4w')(convw3)#12
#Avw2=AveragePooling2D(pool_size=(2,2))(convw4)
convw5 = Conv2D(64, (5,5), activation='relu' ,name='conl5w')(convw4)#8

convw6 = Conv2D(64, (5,5), activation='relu' ,name='conl6w')(convw5)#4
pred_w = Conv2D(1, (1, 1),activation='relu' ,padding='same', name='reconstructed_W')(convw6)

model1=Model(inputs=[image,wtm],outputs=[decoded,pred_w])

model1.summary()
#----------------------training the model--------------------------------------
#------------------------------------------------------------------------------
#----------------------Data preparesion----------------------------------------

(x_train, _), (x_test, _) = mnist.load_data()
x_validation=x_train[1:10000,:,:]
x_train=x_train[10001:60000,:,:]
#
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_validation = x_validation.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))  # adapt this if using `channels_first` image data format
x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))  # adapt this if using `channels_first` image data format
x_validation = np.reshape(x_validation, (len(x_validation), 28, 28, 1))

#---------------------compile and train the model------------------------------
opt=SGD(momentum=0.99,lr=0.0001)
model1.compile(optimizer='adam', loss={'imageprim':'mse','wprim':'binary_crossentropy'}, loss_weights={'imageprim': 0.5, 'wprim': 1.0},metrics=['mae'])
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=40)
#rlrp = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=20, min_delta=1E-4, verbose=1)
mc = ModelCheckpoint('sendAct.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True)
history=model1.fit([x_train,w_expand], [x_train,w_expand],
          epochs=4000,
          batch_size=32, 
          validation_data=([x_validation,wv_expand], [x_validation,wv_expand]),
          callbacks=[TensorBoard(log_dir='/home/jamalm8/tensorboardGNWLoss/', histogram_freq=0, write_graph=False),es,mc])
model1.summary()

回溯(最近一次呼叫最后一次):

文件“”,第124行,已解码_noise=JPEGLayer()(已解码)#16

html" target="_blank">文件"D:\Software\Anaconda3\envs\py36\lib\site-包\keras\Engine\base_layer.py",第457行,在调用输出=self.call(输入,**kwargs)

文件",第94行,调用返回噪声()

文件“”,第88行,采用噪声滑动JPEG格式(K.eval(噪声图像垫))

文件"D:\Software\Anaconda3\envs\py36\lib\site-包\keras\backend\tensorflow_backend.py",第673行,在值返回to_dense(x)。

文件"D:\Software\Anaconda3\envs\py36\lib\site-包\tenstorflow\python\框架\ops.py",第713行,在返回_eval_using_default_session(自我,feed_dict,self.graph,会话)

文件“D:\software\Anaconda3\envs\py36\lib\site packages\tensorflow\python\framework\ops.py”,第5157行,使用默认会话返回会话进行评估。运行(张量、进给量)

文件“D:\software\Anaconda3\envs\py36\lib\site packages\tensorflow\python\client\session.py”,第929行,在运行元数据中

文件“D:\software\Anaconda3\envs\py36\lib\site packages\tensorflow\python\client\session.py”,第1152行,在运行提要中

文件“D:\software\Anaconda3\envs\py36\lib\site packages\tensorflow\python\client\session.py”,第1328行,在元数据中)

文件“D:\software\Anaconda3\envs\py36\lib\site packages\tensorflow\python\client\session.py”,第1348行,位于调用提升类型(e)(节点定义,操作,消息)

InvalidArgumentError:您必须为占位符张量'input_1'提供一个值,该值具有dtype浮点和形状[?,28,28,1][[节点input_1(定义于D:\Software\Anaconda3\envs\py36\lib\site-包\keras\backend\tensorflow_backend.py:517)=Placeholderdtype=DT_FLOAT,形状=[?,28,28,1],_device="/作业:localhost/replica: 0/任务: 0/设备: GPU: 0"]] [[{{节点jpeg_layer_1/zero_padding2d_1/Pad/_9}}=_Recvclient_terminated=假,recv_device="/作业:localhost/replica: 0/任务: 0/设备: CPU: 0",send_device="/作业:localhost/replica: 0/任务: 0/设备: GPU: 0",send_device_incarnation=1,tensor_name="edge_39_jpeg_layer_1/zero_padding2d_1/Pad",tensor_type=DT_FLOAT,_device="/作业:localhost/replica: 0/任务: 0/设备: CPU: 0"]]

InvalidArgumentError(回溯见上文):您必须为占位符张量'input_1'输入一个值,该值带有dtype float和shape[?,28,28,1][[node input_1(定义在D:\software\Anaconda3\envs\py36\lib\site packages\keras\backend\tensorflow_backend.py:517]=占位符dtype=dtu float,shape=[?,28,28,1],\u设备=“/job:localhost/replica:0/task:0/device:GPU:0”][{{node-jpeg\u layer\u 1/zero\u padding2d\u 1/Pad/\u 9}}=\u-Recvclient\u-terminated=false,recv\u-device=“/job:localhost/replica:0/task:0/device:CPU:0/task:0/device:GPU:0”,send\u-device\u-device\u-environment\u-environment=1,tensor\u-name=“edge\u-39\jpeg\u-paddingu-2d\paddingu-layer\paddu-1”“,tensor_type=DT_FLOAT,_device=“/job:localhost/replica:0/task:0/device:CPU:0”]]

共有1个答案

池俊茂
2023-03-14

它是由JPEGLayer类中的行slicAndJpeg(K. ava(noised_image_pad))引起的。基本上,您试图通过调用K. ava()来计算张量,而不向其提供任何数据。你不能计算空张量,对吗?这可以通过完全删除噪声()函数并在预处理中执行填充/切片和其他任务来修复。

用以下方式替换JPEGLayer类,它应该可以工作(假设输入数据已经填充)

class JPEGLayer(Layer):

    def __init__(self,**kwargs):
        super(JPEGLayer, self).__init__(**kwargs)
        self.supports_masking = True
    def call(self, noised_image, training=True):
        return noised_image
 类似资料:
  • 我们在使用Twilio,Twilio应该流媒体音频。 据我所知,我有两个选择,Android Lex和Transcripbe,当Lex是机器人的,而Transcripbe只是翻译演讲,不能参与对话。 所以问题是: [机器人]:好的(就像电话会议中的第三个人..)。

  • 我尝试用python和C++实现代码,结果相同。还尝试另存为。png而不是。jpg。rtsp feed在使用imshow显示相机时工作正常,只有在试图保存帧时才会出现问题。据我所知,这些错误都与ffmpeg有关,但是google对这些类型的错误帮助不大。

  • 使用指南 组件介绍 可自定义图标、颜色、标题、内容、按钮等。 引入方式 import { PageResult, FeIcon } from 'feart'; components:{ FeIcon, 'fe-page-result':PageResult, } 代码演示 默认 <fe-page-result :btnList="btnList"></fe-page-result>

  • 我正在尝试使用在Imagenet数据集上预训练的Keras移动网模型构建镜像分割模型。如何进一步训练模型,我想将U-net层添加到现有模型中,并且仅训练u-net架构的层,移动网模型帮助作为主干。 问题:mobilenet模型的最后一层是尺寸(7x7x1024),这是一个RelU层,我希望将其重新塑造为(256x256x3),U-net输入层可以理解它。

  • 闪电网络 比特币的交易网络最为人诟病的一点便是交易性能:全网每秒 7 笔的交易速度,远低于传统的金融交易系统;同时,等待 6 个块的可信确认导致约 1 个小时的最终确认时间。 闪电网络的主要思路十分简单 -- 将大量交易放到比特币区块链之外进行。该设计最早是 2015 年 2 月在论文《The Bitcoin Lightning Network: Scalable Off-Chain Instan

  • 本书需要来自它的读者帮助,例如由你来指出这本书的任何部分还不够好,难以理解或整个就是错的。请 写信给作者 提交你的意见和建议。 有关本中文译本,如果你认为书中的某些部分的翻译存在疏漏或错译、误译,又或者你觉得有更好的表述,你可以写信给译者提交你的意见或建议。 在向译者提供反馈时,请提供以下信息: 参考译本版本号,在全书开头可以查看到。 与反馈内容相关的章节位置,如“《面向对象编程》的‘类’一节”。