在Keras,我们可以将输出返回model.fit到历史记录,如下所示:
history = model.fit(X_train, y_train,
batch_size=batch_size,
nb_epoch=nb_epoch,
validation_data=(X_test, y_test))
Run Code Online (Sandbox Code Playgroud)
现在,如何将历史记录保存到文件中以供进一步使用(例如,绘制针对时期的acc或loss的绘制图)?
我发现model.predict和model.predict_proba都给出了一个相同的2D矩阵,表示每行的每个类别的概率.
这两个功能有什么区别?
我的cnn模型是使用Keras 1.1.1创建的,它有两个卷积池,后面是两个密集层,并在第二个卷积池和第一个密集层之后添加了丢失.代码如下:
model = Sequential()
#convolution-pooling layers
model.add(Convolution2D(32, 5, 5, input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(64, 5, 5))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
#dense layers
model.add(Flatten())
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add((Dense(2)))
model.add(Activation('softmax'))
#optimizer
sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer = sgd,
metrics=['accuracy'])
print model.summary()
Run Code Online (Sandbox Code Playgroud)
模型摘要给出如下表:
我不清楚如何计算第二卷积层的参数数量(即,由红色矩形指示的51264).我认为数字将是(5*5 + 1)*64 = 1664,因为卷积内核的大小为5*5,并且要提取64个特征映射.
此外,我已经实施了辍学.为什么参数表不能反映这一点.虽然表中列出了丢失(层),但似乎没有给出丢失的参数号.任何人都可以帮我解释参数摘要?
我想检查一些软件包是否安装在Colab. 用于存储已安装软件包的特定文件夹是什么(例如,keras)?
我使用keras数据增强来执行图像分类(十级图像).最后一次训练时期给出的结果如下:
Epoch 50/50
4544/4545 [============================>.] - ETA: 0s - loss: 0.7628 - acc: 0.7359 loss: 0.762710434054
New learning rate: 0.00214407973866
4545/4545 [==============================] - 115s - loss: 0.7627 - acc: 0.7360 - val_loss: 0.5563 - val_acc: 0.8124
Run Code Online (Sandbox Code Playgroud)
然后评估训练模型:
scores = model.evaluate_generator(test_generator,1514) #1514 testing images
print("Accuracy = ", scores[1])
Run Code Online (Sandbox Code Playgroud)
它导致以下结果:
('Accuracy = ', 0.80713342132152621)
Run Code Online (Sandbox Code Playgroud)
准确性与上一次训练时期的准确性不完全相同.我不明白这种差异,即使它是微不足道的.
此外,model.predict_generator给出了完全不同的结果,该数组如下所示:
array([[ 4.98306963e-06, 1.83774697e-04, 5.49453034e-05, ...,
9.25193787e-01, 7.74697517e-04, 5.79946618e-06],
[ 2.06657965e-02, 2.35974863e-01, 2.66802781e-05, ...,
2.16283044e-03, 8.42395966e-05, 2.46680051e-04],
[ 1.40222355e-05, 1.22740224e-03, 7.52218883e-04, ...,
3.76749843e-01, 3.85622412e-01, 6.47417846e-06],
...,
[ …Run Code Online (Sandbox Code Playgroud) 我遇到了一组图像(例如,https://github.com/kehuantiantang/A-DNN-based-Semantic-Segmentation-for-Detecting-Weed-and-Crop/blob/master/stuttgart/stuttgart_cp_00000.npy)存储在 中git lfs的信息如下:
version https://git-lfs.github.com/spec/v1
oid sha256:6692f38904c1ae21cd3d3e6e378538c07fda86fe97ee01d8664bb95fc20cd1de
size 8889498
Run Code Online (Sandbox Code Playgroud)
如何查看和下载原图文件?我是 Git LFS 新手。任何人都可以提供一些详细的步骤吗?
我所做的更新:
我下载了 github 仓库:https://github.com/kehuantiantang/A-DNN-based-Semantic-Segmentation-for-Detecting-Weed-and-Crop
将其解压缩到一个文件夹和cd子文件夹stuttgart(以下是其中包含的内容: https: //github.com/kehuantiantang/A-DNN-based-Semantic-Segmentation-for-Detecting-Weed-and-Crop/tree/master /斯图加特),
键入命令git lfs pull(通过git bashwin10),但出现此错误:“批量响应:超出速率限制: https: //github.com/kehuantantang/A-DNN-based-Semantic-Segmentation-for-Detecting-Weed-and-Crop .git/info/lfs/objects/batch错误:无法从 'https://github.com/kehuantantang/A-DNN-based-Semantic-Segmentation-for-Detecting-Weed-and-Crop.git 获取某些对象/信息/lfs'
在构建LSTM时,我们需要通过以下方式提供输入形状信息:
input_shape = () # a tuple
Run Code Online (Sandbox Code Playgroud)
或者,通过:
input_length = () # an integer
input_dim = () # an integer
Run Code Online (Sandbox Code Playgroud)
我对这两个数量感到有些困惑.它们表明了什么?
另外,input_dim是所谓的时间步吗?
在路径设置中,我错误地编写了代码:os.chdir ='\ some path',它将函数os.chdir()转换为字符串.有没有快速的方法来恢复功能而无需重新启动软件?谢谢!
在 LSTM 上用于对 IMDB 序列数据建模的 keras 示例中(https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py),在输入到 LSTM 层之前有一个嵌入层:
model.add(Embedding(max_features,128)) #max_features=20000
model.add(LSTM(128))
Run Code Online (Sandbox Code Playgroud)
嵌入层的真正作用是什么?在这种情况下,这是否意味着进入 LSTM 层的输入序列的长度是 128?如果是这样,我可以将 LSTM 层写为:
model.add(LSTM(128,input_shape=(128,1))
Run Code Online (Sandbox Code Playgroud)
但也注意到输入X_train已经过pad_sequences处理:
print('Pad sequences (samples x time)')
X_train = sequence.pad_sequences(X_train, maxlen=maxlen) #maxlen=80
X_test = sequence.pad_sequences(X_test, maxlen=maxlen) #maxlen=80
Run Code Online (Sandbox Code Playgroud)
好像输入序列长度是80?
qDebug()可以以二进制格式输出数据吗?
例如,我想检查一些状态变化:
unsigned char status;
...
qDebug() << "Status: " << status;
Run Code Online (Sandbox Code Playgroud)
我想以二进制格式生成输出,如:
Status: 1011
Run Code Online (Sandbox Code Playgroud)