python - 图像分类器错误该层的所有输入都应该是张量
问题描述
嗨,我一直在制作图像分类器,这些源代码来自我的大学,但是当我使用这些代码时,我不断收到错误,源代码是用于多图像分类器的,我只是将分类更改为二进制,我认为我做错了,但 idk什么
import numpy as np
import keras
from keras.layers import Dense,GlobalAveragePooling2D
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Model
from sklearn.metrics import confusion_matrix
import itertools
import matplotlib.pyplot as plt
train_path=r'C:\Users\Acer\imagerec\Brain\TRAIN'
valid_path=r'C:\Users\Acer\imagerec\Brain\VAL'
test_path=r'C:\Users\Acer\imagerec\Brain\TEST'
class_labels=['yes', 'no']
train_batches=ImageDataGenerator(preprocessing_function=keras.applications.xception.preprocess_input)\
.flow_from_directory(train_path, target_size=(299,299),classes=class_labels,batch_size=5)
valid_batches=ImageDataGenerator(preprocessing_function=keras.applications.xception.preprocess_input)\
.flow_from_directory(train_path, target_size=(299,299),classes=class_labels,batch_size=5)
test_batches=ImageDataGenerator(preprocessing_function=keras.applications.xception.preprocess_input)\
.flow_from_directory(train_path, target_size=(299,299),classes=class_labels,batch_size=5, shuffle=False)
base_model=keras.applications.xception.Xception(include_top=False)
x=base_model.output
x=GlobalAveragePooling2D
x=Dense(1,activation='sigmoid')(x)
predictions=Dense(2,activation='Adam')(x)
for layer in base_model.layers:
layer.trainable=False
model=Model(inputs=base_model.input,outputs=predictions)
model.summary()
N=30
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
history=model.fit_generator(train_batches, steps_per_epoch=412,
validation_data=valid_batches,
validation_steps=35,epochs=N,verbose=1)
我得到这个错误
2019-12-09 13:43:11.107461: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
Traceback (most recent call last):
File "C:\Users\Acer\Anaconda3\envs\condas\lib\site-packages\keras\engine\base_layer.py", line 310, in assert_input_compatibility
K.is_keras_tensor(x)
File "C:\Users\Acer\Anaconda3\envs\condas\lib\site-packages\keras\backend\tensorflow_backend.py", line 697, in is_keras_tensor
str(type(x)) + '`. '
ValueError: Unexpectedly found an instance of type `<class 'type'>`. Expected a symbolic tensor instance.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/Acer/PycharmProjects/condas/nyah.py", line 28, in <module>
x=Dense(1,activation='sigmoid')(x)
File "C:\Users\Acer\Anaconda3\envs\condas\lib\site-packages\keras\backend\tensorflow_backend.py", line 75, in symbolic_fn_wrapper
return func(*args, **kwargs)
File "C:\Users\Acer\Anaconda3\envs\condas\lib\site-packages\keras\engine\base_layer.py", line 446, in __call__
self.assert_input_compatibility(inputs)
File "C:\Users\Acer\Anaconda3\envs\condas\lib\site-packages\keras\engine\base_layer.py", line 316, in assert_input_compatibility
str(inputs) + '. All inputs to the layer '
ValueError: Layer dense_1 was called with an input that isn't a symbolic tensor. Received type: <class 'type'>. Full input: [<class 'keras.layers.pooling.GlobalAveragePooling2D'>]. All inputs to the layer should be tensors.
解决方案
几件事。
1) 对于二元分类,使用带损失的sigmoid
激活。
2)不是激活函数。它是一个优化器。
3)您正在尝试在循环中定义模型。binary_crossentropy
adam
for
更多信息,请参考 Keras 文档:https ://keras.io/
修改后的代码:
import numpy as np
import keras
from keras.layers import Dense,GlobalAveragePooling2D
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Model
from sklearn.metrics import confusion_matrix
import itertools
import matplotlib.pyplot as plt
train_path=r'C:\Users\Acer\imagerec\Brain\TRAIN'
valid_path=r'C:\Users\Acer\imagerec\Brain\VAL'
test_path=r'C:\Users\Acer\imagerec\Brain\TEST'
class_labels=['yes', 'no']
train_batches=ImageDataGenerator(preprocessing_function=keras.applications.xception.preprocess_input)\
.flow_from_directory(train_path, target_size=(299,299),classes=class_labels,batch_size=5)
valid_batches=ImageDataGenerator(preprocessing_function=keras.applications.xception.preprocess_input)\
.flow_from_directory(train_path, target_size=(299,299),classes=class_labels,batch_size=5)
test_batches=ImageDataGenerator(preprocessing_function=keras.applications.xception.preprocess_input)\
.flow_from_directory(train_path, target_size=(299,299),classes=class_labels,batch_size=5, shuffle=False)
base_model=keras.applications.xception.Xception(include_top=False, input_shape=(299,299,3))
x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1, activation='sigmoid')(x)
model=Model(inputs=base_model.input, outputs=x)
for layer in base_model.layers:
layer.trainable=False
N=30
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
history=model.fit_generator(train_batches, steps_per_epoch=412,
validation_data=valid_batches,
validation_steps=35,epochs=N,verbose=1)
推荐阅读
- r - 试图用 R 中的 DtD 包找到推断的波动率和推断的公司价值
- python - Stockfish:PermissionError:[WinError 5] 访问被拒绝
- python - Python:我可以使用类级装饰器向装饰类添加 mixin 吗?
- javascript - 使用 mongoDB $lookup 在数组中不存在的另一个集合中查找文档
- python - 使用 pyinstaller 制作 .exe 文件后可以删除哪些文件?
- php - 如何合并具有相同键值的多个数组
- python - 为什么这些 Python 代码无法构建虚拟变量?
- php - 更改 odbc.defaultlrl 大小后如何使用 PHP 和 ODBC 获取 varchar(max)?
- python - Python消除数组第一个单词的问题
- python - Convert Sql server raw query through SqlAlchemy Orm in python