如何解决如何在 Keras 的 ResNet 152 V2 中使用 TFrecord
我打算将 8000 张图像分成一个 TFRecord 并通过将其分成训练、验证和测试来使用它。但是,我不确定如何在 Keras 原生支持的 ResNet152 V2 中使用 TFRecord。
我一直在 Input Shape 部分遇到错误,我尝试将 Shape 更改为 None 并将其置于原始图像大小 (256,256,3)。但总是错误被称为
这是我的代码
import os
import numpy as np
from sklearn.model_selection import train_test_split,cross_val_score,StratifiedKFold
from tensorflow.python.keras.callbacks import TensorBoard
from keras.applications.resnet_v2 import ResNet152V2
from keras import optimizers
from keras.callbacks import ModelCheckpoint,History
from keras.layers import BatchNormalization,Flatten,Dense,Dropout
from keras.models import Model
import tensorflow as tf
from keras import metrics
from IPython.core import display
def Load_TFrecord(TFrecord):
train_size = int(0.6 * 8000)
val_size = int(0.2 * 8000)
test_size = int(0.2 * 8000)
full_dataset = tf.data.TFRecordDataset(TFrecord)
train_dataset = full_dataset.take(train_size)
test_dataset = full_dataset.skip(train_size)
val_dataset = test_dataset.skip(val_size)
test_dataset = test_dataset.take(test_size)
return train_dataset,test_dataset,val_dataset
def Train(train,val,test):
API_model = ResNet152V2(include_top=False,weights=None,input_tensor=None,input_shape=None,pooling=None,classes=8)
flat1 = Flatten()(API_model.layers[-1].output)
dropout1 = Dropout(0.5)(flat1)
class1 = Dense(1024,activation='relu')(dropout1)
dropout2 = Dropout(0.5)(class1)
output = Dense(8,activation='softmax')(dropout2)
model = Model(inputs=API_model.inputs,outputs=output)
sgd = optimizers.Adagrad(lr=0.01,epsilon=None,decay=1e-6)
model.summary()
print(len(model.layers))
model.compile(loss="categorical_crossentropy",optimizer=sgd,metrics=[metrics.mae,metrics.categorical_accuracy])
tensorboard = TensorBoard(log_dir="logs_test/test_1",histogram_freq=1,write_graph=True,write_images=True)
model_checkpoint = ModelCheckpoint('test_.hdf5',monitor='loss',save_best_only=True)
model.fit(train,validation_data=val,batch_size=40,epochs=100,callbacks=[tensorboard,model_checkpoint])
if __name__ == '__main__':
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
tf.config.experimental.set_memory_growth(gpus[0],True)
except RuntimeError as e:
print(e)
train_set,test_set,val_set = Load_TFrecord("Endo_Dataset.tfrecords")
Train(train_set,val_set)
这是我得到的错误:
Traceback (most recent call last):
File "test_TFrecord_Train.py",line 60,in <module>
Train(train_set,val_set)
File "test_TFrecord_Train.py",line 37,in Train
class1 = Dense(1024,activation='relu')(dropout1)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py",line 952,in __call__
input_list)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py",line 1091,in _functional_construction_call
inputs,input_masks,args,kwargs)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py",line 822,in _keras_tensor_symbolic_call
return self._infer_output_signature(inputs,kwargs,input_masks)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py",line 862,in _infer_output_signature
self._maybe_build(inputs)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py",line 2710,in _maybe_build
self.build(input_shapes) # pylint:disable=not-callable
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/layers/core.py",line 1182,in build
raise ValueError('The last dimension of the inputs to `Dense` '
ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。