首页 > 解决方案 > 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')))

这是我遇到的错误:未知错误

标签: pythontensorflowkerasconv-neural-network

解决方案


我想您在定义第一层或输入数据的正确形状时遇到问题。我不确定,因为不知道您的数据详细信息。但是,工作示例代码,包括您的案例中的示例培训是:

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) 等。


推荐阅读