python - Keras 模型未训练
问题描述
更新: 我正在使用 keras:2.2.0 tensorflow:2.4.1 python 3.7.9
我正在为猫与狗 CNN 使用 keras Sequential 模型,因此我遇到了很多错误<class 'int'>
,我正在关注的教程在此链接中
import tensorflow as tf
import pickle
import os
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation,Flatten
from keras.layers import Conv2D,MaxPooling2D
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
pickle_in=open(r'C:\Users\dell\Documents\Python learning\kagglecatsanddogs_3367a/x.pickle','rb')
x=pickle.load(pickle_in)
pickle_in=open(r'C:\Users\dell\Documents\Python learning\kagglecatsanddogs_3367a/y.pickle','rb')
y=pickle.load(pickle_in)
x=x/255 #scaling down features to [0,1]
print(x)
model=Sequential()
model.add(Conv2D(256,(3,3),input_shape=x.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(256,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(x,y,batch_size=4,epochs=10,validation_split=0.3)
model.save(r'C:\Users\dell\Documents\Python learning\kagglecatsanddogs_3367a/Dogs_VS_Cats_CNN.model')
print("GPUs: ", len(tf.config.experimental.list_physical_devices('GPU')))
这是我遇到的错误:未知错误
解决方案
我想您在定义第一层或输入数据的正确形状时遇到问题。我不确定,因为不知道您的数据详细信息。但是,工作示例代码,包括您的案例中的示例培训是:
import tensorflow as tf
import pickle
import os
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation,Flatten,Input
from keras.layers import Conv2D,MaxPooling2D
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
#pickle_in=open(r'C:\Users\dell\Documents\Python learning\kagglecatsanddogs_3367a/x.pickle','rb')
#x=pickle.load(pickle_in)
#pickle_in=open(r'C:\Users\dell\Documents\Python learning\kagglecatsanddogs_3367a/y.pickle','rb')
#y=pickle.load(pickle_in)
#Test data...
x=tf.random.uniform((16,16,3))
y=tf.random.uniform((1,1))
x=x/255 #scaling down features to [0,1]
print(x)
model=Sequential()
model.add(Conv2D(256,(3,3),input_shape=x.shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(256,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#Let's create a sample training data...
x_train=tf.random.uniform((10,16,16,3))
y_train=tf.random.uniform((10,1))
model.fit(x_train,y_train,batch_size=4,epochs=10,validation_split=0.3)
#model.save(r'C:\Users\dell\Documents\Python learning\kagglecatsanddogs_3367a/Dogs_VS_Cats_CNN.model')
print("GPUs: ", len(tf.config.experimental.list_physical_devices('GPU')))
#Just for example...
for kierros in range(5):
n=10+kierros
x_train=tf.random.uniform((n,16,16,3))
y_train=tf.random.uniform((n,1))
print("Now the model is ready to take in the real training data with input shape: ",x_train.shape, " and target shape: ",y_train.shape, " in case of ", len(y_train), " training examples...")
print("...etc.")
...首先运行代码并验证您是否看到训练运行良好并且输出如下所示:
...如果是,那么只需添加您的真实数据,但请注意数据的输入形状是否正确。例如,如果您有 10 张大小为 16x16x3(非常小的 RGB 图像)的图片,则训练输入数据的形状为 (10,16,16,3) 等。
推荐阅读
- opencv - 使用 OpenCV 的 Graph API (G-API) 计算直方图
- c# - 如何解析没有根节点的xml文档?
- firebase - 使用 firebase 服务方法时 Cloud Firestore 模拟器未运行
- typescript - 如何在 Visual Studio 2019 错误列表中显示 eslint 错误
- c# - 将 3 个字节 Span 转换为 int 的正确方法
- java - 向我的 RecyclerView 添加过滤/搜索
- c++ - 如何在 OpenCv c++ 中获取图像像素亮度和对比度?
- spring-integration - 使用网桥端点配置器的正确方法是什么?
- delphi - 如何在运行时创建 Tgrid
- screensharing - getDisplayMedia(获取可用选项列表)