Keras 模型未训练

时间:2021-04-23 11:22:31

标签: python tensorflow keras conv-neural-network

更新: 我正在使用 keras:2.2.0 张量流:2.4.1 蟒蛇 3.7.9

我正在使用 keras Sequential 模型来处理猫 vs 狗 CNN,因此我遇到了错误,后面跟着很多 <class 'int'>,我正在学习的教程在这个 link

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')))

这是我遇到的错误:UNKNOWN ERROR

1 个答案:

答案 0 :(得分:0)

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

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.")

...首先运行代码并验证您是否看到训练运行良好并且输出如下所示:

enter image description here

...如果是,那么只需添加您的真实数据,但要注意数据的输入形状是正确的。例如,如果您有十张大小为 16x16x3(非常小的 RGB 图像)的图片,则训练输入数据形状为 (10,16,16,3) 等。