TimeDistributed 层应用几个卷积层 error

如何解决TimeDistributed 层应用几个卷积层 error

我有 tf.keras.layers.TimeDistributed 层 (https://www.tensorflow.org/api_docs/python/tf/keras/layers/TimeDistributed) 的问题。

我知道 TimeDistributed 可用于将单层(密集、卷积...)应用于一组输入,获得一组输出。

不仅如此,直到最近我才能够使用它来将整个“子模型”应用于所有输入。也就是说,一系列的层,而不仅仅是一个。 Patrice Ferlet (https://medium.com/smileinnovation/training-neural-network-with-image-sequence-an-example-with-video-as-input-c3407f7a0b0f) 在此处解释了一个示例。

以该源代码为例,我可以像这样定义一个连续的“子模型”:

import keras
from keras.layers import Conv2D,BatchNormalization,\
MaxPool2D,GlobalMaxPool2D

def build_convnet(shape=(112,112,3)):
  momentum = .9
  model = keras.Sequential()
  model.add(Conv2D(64,(3,3),input_shape=shape,padding='same',activation='relu'))
  model.add(Conv2D(64,activation='relu'))
  model.add(BatchNormalization(momentum=momentum))

  model.add(MaxPool2D())

  model.add(Conv2D(128,activation='relu'))
  model.add(Conv2D(128,activation='relu'))
  model.add(BatchNormalization(momentum=momentum))

  model.add(MaxPool2D())

  model.add(Conv2D(256,activation='relu'))
  model.add(Conv2D(256,activation='relu'))
  model.add(BatchNormalization(momentum=momentum))

  model.add(MaxPool2D())

  model.add(Conv2D(512,activation='relu'))
  model.add(Conv2D(512,activation='relu'))
  model.add(BatchNormalization(momentum=momentum))

  # flatten...
  model.add(GlobalMaxPool2D())
  return model

然后将此子模型包含在一个高级模型中,该模型使用整个初始子模型 (convnet) 调用 TimeDistributed。

from keras.layers import TimeDistributed,GRU,Dense,Dropout

def action_model(shape=(5,nbout=3):
  # Create our convnet with (112,3) input shape
  convnet = build_convnet(shape[1:])

  # then create our final model
  model = keras.Sequential()
  # add the convnet with (5,3) shape
  model.add(TimeDistributed(convnet,input_shape=shape))
  # here,you can also use GRU or LSTM
  model.add(GRU(64))
  # and finally,we make a decision network
  model.add(Dense(1024,activation='relu'))
  model.add(Dropout(.5))
  model.add(Dense(512,activation='relu'))
  model.add(Dropout(.5))
  model.add(Dense(128,activation='relu'))
  model.add(Dropout(.5))
  model.add(Dense(64,activation='relu'))
  model.add(Dense(nbout,activation='softmax'))
  return model

现在效果很好,我可以调用模型结构

mod=action_model()
mod.summary()

但是,如果我使用来自 keras 的预定义架构(例如 VGG16)作为主干来定义 convnet 模型,则似乎存在错误。 (我还需要通过 tf.keras.models.Sequential 更改 keras.Sequential)

import tensorflow as tf
from keras.layers import Flatten

def build_convnet():

    prevModel = tf.keras.applications.vgg16.VGG16(
        include_top=False,input_shape=(112,weights='imagenet'  # ImageNet weights
    )

    model = tf.keras.models.Sequential()

    model.add(prevModel)
    model.add(Flatten())

    return model

def action_model(shape=(5,3) input shape
  convnet = build_convnet()

  # then create our final model
  model = tf.keras.models.Sequential()
  # add the convnet with (5,activation='softmax'))
  return model

当我在定义基于 VGG16 的架构后运行它时

mod=action_model()
mod.summary()

我收到以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-106-c8c6108a1d66> in <module>()
----> 1 mod=action_model()
      2 mod.summary()

1 frames
/usr/local/lib/python3.7/dist-packages/keras/layers/wrappers.py in __init__(self,layer,**kwargs)
    121           'Please initialize `TimeDistributed` layer with a '
    122           '`tf.keras.layers.Layer` instance. You passed: {input}'.format(
--> 123               input=layer))
    124     super(TimeDistributed,self).__init__(layer,**kwargs)
    125     self.supports_masking = True

ValueError: Please initialize `TimeDistributed` layer with a `tf.keras.layers.Layer` instance. You passed: <tensorflow.python.keras.engine.sequential.Sequential object at 0x7fbb36266a50>

所以现在看来​​ python 是在抱怨我使用的不是单层的 TimeDistributed 输入。这没有任何意义,因为初始示例运行良好,并且还涉及使用 TimeDistributed 的多个层。除此之外,几周前 VGG16 模型也运行良好。

我在 Google CoLab 中运行所有这些。

有人能帮我弄清楚这里发生了什么吗?这是由新的 tensorflow 2.5.0 版本引起的吗?我到处都能看到人们使用 TimeDistributed 来应用单个层,但到目前为止,应用整个顺序模型的效果还不错(尽管文档中没有明显提及)。

谢谢!

解决方法

您得到上述 ValueError 是由于混合了 tf.keraskeras 导入,而 TF2.5 不支持。

工作代码如下图

import tensorflow as tf
#from keras.layers import TimeDistributed,GRU,Dense,Dropout
from tensorflow.keras.layers import Flatten,Dropout,TimeDistributed,Dense

def build_convnet():

    prevModel = tf.keras.applications.vgg16.VGG16(
        include_top=False,input_shape=(112,112,3),weights='imagenet'  # ImageNet weights
    )

    model = tf.keras.models.Sequential()

    model.add(prevModel)
    model.add(Flatten())

    return model

def action_model(shape=(5,nbout=3):
  # Create our convnet with (112,3) input shape
  convnet = build_convnet()

  # then create our final model
  model = tf.keras.models.Sequential()
  # add the convnet with (5,3) shape
  model.add(TimeDistributed(convnet,input_shape=shape))
  # here,you can also use GRU or LSTM
  model.add(GRU(64))
  # and finally,we make a decision network
  model.add(Dense(1024,activation='relu'))
  model.add(Dropout(.5))
  model.add(Dense(512,activation='relu'))
  model.add(Dropout(.5))
  model.add(Dense(128,activation='relu'))
  model.add(Dropout(.5))
  model.add(Dense(64,activation='relu'))
  model.add(Dense(nbout,activation='softmax'))
  return model

mod=action_model()
mod.summary()

输出:

Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
time_distributed_1 (TimeDist (None,5,4608)           14714688  
_________________________________________________________________
gru_1 (GRU)                  (None,64)                897408    
_________________________________________________________________
dense (Dense)                (None,1024)              66560     
_________________________________________________________________
dropout (Dropout)            (None,1024)              0         
_________________________________________________________________
dense_1 (Dense)              (None,512)               524800    
_________________________________________________________________
dropout_1 (Dropout)          (None,512)               0         
_________________________________________________________________
dense_2 (Dense)              (None,128)               65664     
_________________________________________________________________
dropout_2 (Dropout)          (None,128)               0         
_________________________________________________________________
dense_3 (Dense)              (None,64)                8256      
_________________________________________________________________
dense_4 (Dense)              (None,3)                 195       
=================================================================
Total params: 16,277,571
Trainable params: 16,571
Non-trainable params: 0
_________________________________________________________________

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res