Sim*_*ity 1 python neural-network conv-neural-network keras tensorflow
我正在尝试运行此代码,但收到以下错误:
Using TensorFlow backend.
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "BestSplits" device_type: "CPU"') for unknown op: BestSplits
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "CountExtremelyRandomStats" device_type: "CPU"') for unknown op: CountExtremelyRandomStats
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "FinishedNodes" device_type: "CPU"') for unknown op: FinishedNodes
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "GrowTree" device_type: "CPU"') for unknown op: GrowTree
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "ReinterpretStringToFloat" device_type: "CPU"') for unknown op: ReinterpretStringToFloat
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "SampleInputs" device_type: "CPU"') for unknown op: SampleInputs
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "ScatterAddNdim" device_type: "CPU"') for unknown op: ScatterAddNdim
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TopNInsert" device_type: "CPU"') for unknown op: TopNInsert
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TopNRemove" device_type: "CPU"') for unknown op: TopNRemove
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TreePredictions" device_type: "CPU"') for unknown op: TreePredictions
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "UpdateFertileSlots" device_type: "CPU"') for unknown op: UpdateFertileSlots
Model loaded.
Traceback (most recent call last):
File "classifier_from_little_data_script_3.py", line 64, in <module>
top_model.add(Flatten(input_shape=model.output_shape[1:]))
File "C:\Python35\lib\site-packages\keras\models.py", line 430, in add
layer(x)
File "C:\Python35\lib\site-packages\keras\engine\topology.py", line 583, in __call__
output_shape = self.compute_output_shape(input_shape)
File "C:\Python35\lib\site-packages\keras\layers\core.py", line 488, in compute_output_shape
'(got ' + str(input_shape[1:]) + '. '
ValueError: The shape of the input to "Flatten" is not fully defined (got (None, None, 512). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
谢谢.
为了防止其他人遇到类似的问题,并且想知道为什么会抛出有问题的错误,我会在@ Simplicity的答案中添加更多细节:
正如keras文档中所提到的,截至本文撰写时,Keras有两个后端Theano和Tensorflow.Theano和Tensorflow数据/图像具有不同的维度顺序.此订单如下:
TensorFlow:[批次,宽度,高度,通道]
Theano:[批次,渠道,宽度,高度]
如果您要使用Tensorflow订购(如OP的情况),您必须:
在keras.json配置文件中指定(~/.keras/keras.json在Ubuntu中找到).例如,要使用Theano运行,请在keras.json配置文件中添加以下行:
"image_dim_ordering": "th"
"backend": "theano"
Run Code Online (Sandbox Code Playgroud)指定您将在代码中使用的相关后端,例如:
from keras import backend as K
K.set_image_dim_ordering('th')
Run Code Online (Sandbox Code Playgroud)OP使用Tensorflow,因此他/她需要确保数据在表单中[batch, width, height, channels],因此您必须将输入张量的定义更改为:
input_tensor = Input(shape=(150,150,3))
Run Code Online (Sandbox Code Playgroud)
而模型为:
model = applications.VGG16(weights='imagenet', include_top=False, input_tensor=input_tensor)
Run Code Online (Sandbox Code Playgroud)
如果OP使用Theano后端,则输入张量必须定义为:
input_tensor = Input(shape=(3, 150, 150))
Run Code Online (Sandbox Code Playgroud)
- 在这种情况下,通道是第一个参数.
模型的定义方式与:
model = applications.VGG16(weights='imagenet', include_top=False, input_tensor=input_tensor)
Run Code Online (Sandbox Code Playgroud)
重申一下; 我只是简单地说明了为什么/如何@ Simplicity的答案对他起作用.
我希望这可以帮助别人 :).
资料来源: