python - 模型在 Keras 中运行良好,但在 Tensorflow 中不行
问题描述
在使用 Tensorflow 时,在拟合模型后,在第一个 epoch 中显示未知(1/未知),但仅使用 keras 时它工作正常。有什么问题或者我做错了什么
张量流代码:-
import tensorFlow as tf
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
training_set = train_datagen.flow_from_directory('dataset/train',
target_size = (150, 150),
batch_size = 10,
class_mode = 'binary')
test_datagen = ImageDataGenerator(rescale = 1./255)
test_set = test_datagen.flow_from_directory('dataset/test',
target_size = (150, 150),
batch_size = 10,
class_mode = 'binary')
cnn=tf.keras.models.Sequential()
cnn.add(tf.keras.layers.Conv2D(filters=100,kernel_size=3,activation='relu',input_shape=(150,150,3)))
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2))
cnn.add(tf.keras.layers.Conv2D(filters=100,kernel_size=3,activation='relu',))
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2))
cnn.add(tf.keras.layers.Flatten())
cnn.add(tf.keras.layers.Dense(units=50, activation='relu'))
cnn.add(tf.keras.layers.Dense(units=2, activation='softmax'))
cnn.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
cnn.fit(x=training_set,validation_data=test_set,epochs=10)
表明
Epoch 1/10
28/Unknown - 12s 416ms/step - loss: 0.9420 - accuracy: 0.4964
但是从每一行中删除 tf 后它工作正常
解决方案
由于 you are ImageDataGenerator
,参数在使用时steps_per_epoch
是强制性的(不确定它是如何在 native 中实现的)cnn.fit
tf.keras
keras
在Tensorflow 文档的Arguments
部分中指出:model.fit
steps_per_epoch:整数或无。在宣布一个时期完成并开始下一个时期之前的步骤总数(样本批次)。当使用输入张量(例如 TensorFlow 数据张量)进行训练时,默认的 None 等于数据集中的样本数除以批量大小,如果无法确定,则为 1。如果 x 是 tf.data 数据集,并且 'steps_per_epoch' 为 None,则 epoch 将运行直到输入数据集耗尽。传递无限重复数据集时,您必须指定 steps_per_epoch 参数。数组输入不支持此参数。
所以,如果你更换
cnn.fit(x=training_set,validation_data=test_set,epochs=10)
和
batch_size = 20
No_Of_Training_Images = Train_Generator.classes.shape[0]
steps_per_epoch = No_Of_Training_Images/batch_size
cnn.fit(x=training_set,validation_data=test_set,epochs=10,
steps_per_epoch = steps_per_epoch)
输出将如下所示:
Epoch 1/10
28/100 - 12s 416ms/step - loss: 0.9420 - accuracy: 0.4964
推荐阅读
- c# - 点击后隐藏按钮
- python - pyautogui mouseDown() 不适用于自动鼠标移动
- java - 如何在不使用固定数字的情况下返回二维形状对象的 x 位置?
- python - AttributeError:“元组”对象没有属性“大小”
- python - 通过迭代多行来计算 Mann-Kendall
- c++ - C++ - 更改 .h 文件后的错误仅通过重新编译修复
- ios - 你能在 CellForRowAt 之后更新 UITableView 中的节数吗?
- purescript - 如何在 repl 中跟踪递归 PureScript 函数的值?
- excel - 当我向表中添加新值时,我试图避免在 VBA 中调整范围,所以我尝试使用公式,但它一直给我一个运行时错误“9”
- python - 当查询具有动态生成/可变长度参数列表时防止 SQL 注入