如何解决如何通过 tensorflow 放置 skimage imread_collection
我正在尝试通过神经网络放置一组图像,但我无法弄清楚如何将大量图像放入 tensorflow 模型中,因为我试图将这些集合转换为一个 numpy 数组导致内存错误。
我应该注意,我对 tensorflow 很陌生。
import numpy as np
from skimage.io import imread_collection
from tensorflow import keras
from tensorflow.keras import layers
def gen(arr):return(i.reshape(400*600*3) for i in arr) # Only used in Attempt2.
labelFile=open("lables_text_file.txt","r")
labels=labelFile.read()
labelFile.close()
labels=getTrain(labels)#Converts to a tuple containing the lables in order.
data = imread_collection("path_to_images/*.jpg",conserve_memory=True)
train=data[:-len(data)//4]
trainLabels=labels[:-len(data)//4]
test=data[-len(data)//4:]
testLabels=labels[-len(data)//4:]
#train = train.reshape(-1,400*600*3) # Attempt1
#test = test.reshape(-1,400*600*3) # Attempt1
#train = gen(train) # Attempt2
#test = gen(test) # Attempt2
trainLabels = keras.utils.to_categorical(trainLabels,23)
testLabels = keras.utils.to_categorical(testLabels,23)
model=keras.Sequential([keras.Input(shape=(400*600*3,)),layers.Dense(600,name='hidden1',activation='relu'),layers.Dense(400,name='hidden2',layers.Dense(46,name='hidden3',layers.Dense(23,activation="softmax")])
optimizer = keras.optimizers.Adam(learning_rate=0.0015)
model.compile(loss=keras.losses.CategoricalCrossentropy(),optimizer=optimizer,metrics=[keras.metrics.CategoricalAccuracy()])
model.fit(train,trainLabels,batch_size=128,epochs=8,validation_data=(test,testLabels),shuffle=True)
当我按原样运行代码时,结果如下:
ValueError: Failed to find data adapter that can handle input: <class 'skimage.io.collection.ImageCollection'>,<class 'numpy.ndarray'>
当我尝试使用 Attempt1 时,结果如下:
AttributeError: 'ImageCollection' object has no attribute 'reshape'
当我尝试使用 Attempt2 时,结果如下:
ValueError: `y` argument is not supported when using python generator as input.
如何将数据放入`model.fit,使其成功训练神经网络?
解决方法
我想我可能已经解决了这些问题。
工作代码:
import numpy as np
from skimage.io import imread_collection
from tensorflow import keras
from tensorflow.keras import layers
def gen(arr,labels):return((arr[i].reshape(-1,400*600*3),labels[i].reshape(-1,23)) for i in range(len(arr)))
labelFile=open("lables_text_file.txt","r")
labels=labelFile.read()
labelFile.close()
labels=getTrain(labels)#Converts to a tuple containing the lables in order.
data = imread_collection("path_to_images/*.jpg",conserve_memory=True)
train=data[:-len(data)//4]
trainLabels=labels[:-len(data)//4]
test=data[-len(data)//4:]
testLabels=labels[-len(data)//4:]
#train = train.reshape(-1,400*600*3) # Attempt1
#test = test.reshape(-1,400*600*3) # Attempt1
trainLabels = keras.utils.to_categorical(trainLabels,23)
testLabels = keras.utils.to_categorical(testLabels,23)
train = gen(train,trainLabels) # Attempt2
test = gen(test,testLabels) # Attempt2
model=keras.Sequential([keras.Input(shape=(400*600*3,)),layers.Dense(600,name='hidden1',activation='relu'),layers.Dense(400,name='hidden2',layers.Dense(46,name='hidden3',layers.Dense(23,activation="softmax")])
optimizer = keras.optimizers.Adam(learning_rate=0.0015)
model.compile(loss=keras.losses.CategoricalCrossentropy(),optimizer=optimizer,metrics=[keras.metrics.CategoricalAccuracy()])
model.fit(train,None,batch_size=128,epochs=8,validation_data=(test,testLabels),shuffle=True)
解决方案是传入一个生成器,该生成器返回包含输入和标签的二元组(而不是直接传入标签),但如果有时间,我可能会在此答案中包含其他问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。