前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用Keras通过Python进行卷积神经网络的手写数字识别

用Keras通过Python进行卷积神经网络的手写数字识别

作者头像
青橙.
发布于 2018-02-07 09:23:58
发布于 2018-02-07 09:23:58
6K00
代码可运行
举报
文章被收录于专栏:橙、橙、
运行总次数:0
代码可运行

图像识别深度学习技术的一个普遍具有的功能。

深度学习或机器学习的“hello world”是用MNIST数据集进行手写数字识别。

在这篇文章中,您将了解如何使用Keras深度学习库开发一个深度学习模型,以高性能的实现Python上基于MNIST手写数字识别任务。

通过本次教程,你会知道:

  • 如何在Keras中加载MNIST数据集。
  • 如何构建和评估MNIST问题的基本神经网络模型。
  • 如何实现和评估一个简单的MNIST卷积神经网络
  • 如何进行一个高性能的MNIST深度学习。

让我们开始吧。

图片来自 Jamie,保留一切权利。
图片来自 Jamie,保留一切权利。

MNIST手写数字识别问题的描述

MNIST是由Yann LeCun, Corinna Cortes 和Christopher Burges针对识别手写数字的问题,·对机器学习模型进行评估的数据集。

数据集是从美国国家标准与技术研究院(NIST)提供的众多扫描文件数据中收集的。这也是数据集名称的来源:Modified NIST或MNIST。

这些图像是从各种扫描的文件中收集格式化并居中得到的。这使得它很适合作为评估模型的数据集,它能帮助开发人员节省出时间进行用于机器学习开发,只需进行很少的数据采集或数据准备工作。

每个图像都是28×28像素的(总共784个像素点)。使用数据集的通常用来评估和比较模型,其中使用60,000个图像来训练模型,并且使用另外10,000个图像来评估模型。

这是一个数字识别问题。因此有10个数字(0到9)或者说有10个类别作为预期的输出。使用预测误差来判断结果,只不过是逆分类的准确度。

理想的结果要求达到小于1%的预期错误率。用大型卷积神经网络可以达到约0.2%错误率。Rodrigo Benenson的网站 列出了识别MNIST数据集的最新的论文和最新的结果。

在Keras中加载MNIST数据集

Keras深度学习库为加载MNIST数据集提供了一种方便简洁的方法。

在第一次调用这个函数时,数据集会自动下载,并以15MB文件大小存储在〜/ .keras / datasets / mnist.pkl.gz目录中。

这对开发、测试深度学习模型非常方便。

为了演示加载MNIST数据集是多么容易,我们将首先编写一个脚本来下载数据集,并显示训练数据集中的前4个图像。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
#绘制MNIST实例
from keras.datasets import mnist
import matplotlib.pyplot as plt
#加载(下载,如果需要的话)MNIST数据集
(X_train, y_train), (X_test, y_test) = mnist.load_data()
plot 4 images as gray scale
plt.subplot(221)
plt.imshow(X_train0, cmap=plt.get_cmap('gray'))
plt.subplot(222)
plt.imshow(X_train1, cmap=plt.get_cmap('gray'))
plt.subplot(223)
plt.imshow(X_train2, cmap=plt.get_cmap('gray'))
plt.subplot(224)
plt.imshow(X_train3, cmap=plt.get_cmap('gray'))
#绘制图片
plt.show()

你可以看到,下载和加载MNIST数据集就是调用mnist.load_data()函数如此的简单。运行上面的例子,你应该看到下面的图片。

MNIST数据集中的示例
MNIST数据集中的示例

具有多层结构的基本模型

我们真的需要卷积神经网络这样复杂的模型来实现MNIST识别的良好的效果?

你可以使用带有单个层的非常简单的神经网络模型获得非常棒的效果。在本节中,我们将创建一个简单的多层感知器模型,达到仅有1.74%的错误率的效果。我们将用它作为更复杂的卷积神经网络模型的基础。

我们首先导入我们需要的类和函数。

代码语言:js
AI代码解释
复制
import numpy
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.utils import np_utils

将随机数产生器初始化为一个常量能让最终的结果是固定的,这是一个好主意。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 设定随机数种子
seed = 7
numpy.random.seed(seed)

之后我们可以使用Keras加载MNIST数据集。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
load data
(X_train, y_train), (X_test, y_test) = mnist.load_data()

训练数据集被构造为包括图像长宽的三维数组。对于多层感知器模型,我们必须将图像降维为像素矢量。在这种情况下,28×28大小的图像将变为784个像素的输入值。

我们可以使用NumPy数组上的reshape()函数轻松完成这个转换。我们还可以通过强制像素值的灰度值降低到为32位来减少内存需求,原因之一是这是Keras默认的灰度值精度。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 对于每一张图片转换 28*28的图像为 784 像素点
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32')
X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32')

像素值是0到255之间的灰度值。使用神经网络模型时,对输入值进行缩放是一个好主意。由于按比例缩放是大家所熟悉的,并且变现优异,我们可以通过对每个值除以255这个最大值来非常快速地将像素值控制在0~1的范围。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 规范化输入从 0-255 到 0-1
X_train = X_train / 255
X_test = X_test / 255

最终需要输出变量是从0到9的整数。这是一个多类分类输出问题。因此,使用类值的独热编码,将整数向量转换成二进制矩阵是很棒的。

我们可以使用Keras中内置的np_utils.to_categorical()函数完成此操作。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 独热编码
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]

现在就准备好创建我们简单的模型了。我们用一个函数定义我们的模型。如果你扩展该示例并试图得到更好的效果,这样做会很方便。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
#定义基准模型
def baseline_model():
 # 创建模型
 model = Sequential()
 model.add(Dense(num_pixels, input_dim=num_pixels, kernel_initializer='normal', activation='relu'))
 model.add(Dense(num_classes, kernel_initializer='normal', activation='softmax'))
 # 编译模型
 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
 return model

该模型是一个简单的神经网络,其中一个层具有与输入相同数量的神经元数量(784)。整流器功能用于处理层中的神经元。

输出层使用softmax函数将输出转换为概率值,并允许选择10个类中的一个作为模型的输出预测。对数的损失用损失函数(在Keras中称为categorical_crossentropy)并用有效的ADAM梯度下降算法来计算权重。

我们现在可以拟合和评估模型。该模型每200幅图像更新一次。测试数据被用作验证数据集,在模型训练时看到模型的进度。具体地说将每个训练时期的结果以两位小数形式有2行的输出。

最后,使用测试数据集来评估模型并输出错误率。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 构建模型
model = baseline_model()
# 调整模型
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200, verbose=2)
# 输出错误率
scores = model.evaluate(X_test, y_test, verbose=0)
print("Baseline Error: %.2f%%" % (100-scores[1]*100))

在CPU上运行可能需要几分钟的时间。你应该看到下面的输出。在非常少的代码行中定义的这个非常简单的网络实现了非常可观的仅有1.91%的错误率。

代码语言:js
AI代码解释
复制
Train on 60000 samples, validate on 10000 samples
Epoch 1/10
8s - loss: 0.2797 - acc: 0.9209 - val_loss: 0.1413 - val_acc: 0.9576
Epoch 2/10
8s - loss: 0.1117 - acc: 0.9677 - val_loss: 0.0919 - val_acc: 0.9702
Epoch 3/10
8s - loss: 0.0718 - acc: 0.9796 - val_loss: 0.0782 - val_acc: 0.9774
Epoch 4/10
8s - loss: 0.0505 - acc: 0.9858 - val_loss: 0.0758 - val_acc: 0.9762
Epoch 5/10
8s - loss: 0.0374 - acc: 0.9892 - val_loss: 0.0670 - val_acc: 0.9792
Epoch 6/10
8s - loss: 0.0268 - acc: 0.9929 - val_loss: 0.0630 - val_acc: 0.9803
Epoch 7/10
8s - loss: 0.0210 - acc: 0.9945 - val_loss: 0.0604 - val_acc: 0.9815
Epoch 8/10
8s - loss: 0.0140 - acc: 0.9969 - val_loss: 0.0620 - val_acc: 0.9808
Epoch 9/10
8s - loss: 0.0107 - acc: 0.9978 - val_loss: 0.0598 - val_acc: 0.9812
Epoch 10/10
7s - loss: 0.0080 - acc: 0.9985 - val_loss: 0.0588 - val_acc: 0.9809
Baseline Error: 1.91%

MNIST简单的卷积神经网络

现在我们已经看到了如何加载MNIST数据集并训练一个简单的多层感知器模型,现在是开发一个更复杂的卷积神经网络或CNN模型的时候了。

Keras提供了很多创建卷积神经网络的方法

在本节中,我们将为MNIST创建一个简单的CNN,演示如何使用CNN实现包括卷积图层,合并图层和压缩图层的方法。

第一步是导入所需的类和函数。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import numpy
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
K.set_image_dim_ordering('th')

同样,我们总是将随机数发生器初始化为一个恒定的值,以获得可重复的结果。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 设置随机数种子
seed = 7
numpy.random.seed(seed)

接下来,我们需要加载MNIST数据集并对其进行重新配置,让它适合CNN训练。在Keras中,用于二维卷积的图层理想的输入是具有高维度的像素输入。

在RGB的情况下,红色,绿色和蓝色的像素分量将有三个,并且每个彩色图像将具有3组输入。在MNIST像素值是灰度的情况下,像素维度被设置为1。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 加载数据
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 转换数据为 [samples][pixels][width][height]
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32')

像之前一样,将像素值归一化到0和1范围并对输出变量进行独热编码处理。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 规范化输入从 0-255 到 0-1
X_train = X_train / 255
X_test = X_test / 255
# 独热编码输出
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]

接下来我们定义我们的神经网络模型

卷积神经网络比标准的多层感知器复杂,所以我们从使用所有元素产生理想的结果的简单的结构开始。下面简述一下网络架构。

  1. 第一层是一个叫做Convolution2D的卷积层。该图层具有32个特征图,其大小为5×5,并具有整流器激活的功能。这是输入图层,期望具有上述结构轮廓像素丰富的图像。
  2. 第二层我们定义一个采用maxPooling2D最大值的池。它配置的池大小为2×2。
  3. 第三层是一个使用dropout并称为Dropout的正则化层。它被配置为随机的20%的神经元,用来减少过度拟合。
  4. 第四层是一个将二维矩阵数据转换为矢量的一个叫Flatten的图层。它允许通过标准完全连通层进行输出处理。
  5. 第五层是具有128个神经元和整流器激活功能的完全连通层。
  6. 第六次(输出层)有10个神经元用于区别10个类,softmax激活函数为每个类输出概率估测。

如前所述,使用对数损失和ADAM梯度下降算法来训练模型。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def baseline_model():
    # 创建模型
    model = Sequential()
    model.add(Conv2D(32, (5, 5), input_shape=(1, 28, 28), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.2))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dense(num_classes, activation='softmax'))
    # 编译模型
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

我们用与多层感知器相同的方法评估模型。CNN配置10个周期,每批数量为200。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 构造
model = baseline_model()
# 调整
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200, verbose=2)
# 最终输出
scores = model.evaluate(X_test, y_test, verbose=0)
print("CNN Error: %.2f%%" % (100-scores[1]*100))

运行这个实例,训练和验证测试的准确性被打印在每个时期,并且在结束时打印出错率。

在GPU上运行时期可能需要大约45秒(如在AWS上)。你可以看到,神经卷积网络达到了1.03%的错误率,这比我们上面简单的多层感知器模型更好。

代码语言:js
AI代码解释
复制
Train on 60000 samples, validate on 10000 samples
Epoch 1/10
60000/60000 ============================== - 120s - loss: 0.2346 - acc: 0.9334 - val_loss: 0.0774 - val_acc: 0.9762
Epoch 2/10
60000/60000 ============================== - 42s - loss: 0.0716 - acc: 0.9782 - val_loss: 0.0454 - val_acc: 0.9856
Epoch 3/10
60000/60000 ============================== - 42s - loss: 0.0520 - acc: 0.9842 - val_loss: 0.0429 - val_acc: 0.9853
Epoch 4/10
60000/60000 ============================== - 42s - loss: 0.0406 - acc: 0.9868 - val_loss: 0.0369 - val_acc: 0.9876
Epoch 5/10
60000/60000 ============================== - 42s - loss: 0.0331 - acc: 0.9898 - val_loss: 0.0345 - val_acc: 0.9884
Epoch 6/10
60000/60000 ============================== - 42s - loss: 0.0265 - acc: 0.9917 - val_loss: 0.0323 - val_acc: 0.9905
Epoch 7/10
60000/60000 ============================== - 42s - loss: 0.0220 - acc: 0.9931 - val_loss: 0.0337 - val_acc: 0.9894
Epoch 8/10
60000/60000 ============================== - 42s - loss: 0.0201 - acc: 0.9934 - val_loss: 0.0316 - val_acc: 0.9892
Epoch 9/10
60000/60000 ============================== - 42s - loss: 0.0163 - acc: 0.9947 - val_loss: 0.0281 - val_acc: 0.9908
Epoch 10/10
60000/60000 ============================== - 42s - loss: 0.0135 - acc: 0.9956 - val_loss: 0.0327 - val_acc: 0.9897
CNN Error: 1.03%

更大的MNIST卷积神经网络

现在我们已经看到了如何创建一个简单的CNN,让我们来看看一个能够接近最先进的模型结果。

我们导入类和函数,然后加载、准备与之前CNN示例相同的数据。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 加载 CNN 使用 MNIST Dataset
import numpy
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
K.set_image_dim_ordering('th')
#设定随机数
seed = 7
numpy.random.seed(seed)
# 加载数据
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 转换数据 [samples][pixels][width][height]
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32')
#调整输入范围 从0-255 到 0-1
X_train = X_train / 255
X_test = X_test / 255
#独热编码
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]

这一次,我们定义一个大的CNN架构,其中包含额外的卷积、最大池层和完全连接层。网络结构整理如下。

  1. 具有30个尺寸为5×5的特征图的卷积层。
  2. 汇聚层数超过2 * 2个块。
  3. 具有15个尺寸为3×3的特征图的卷积层。
  4. 汇聚层数超过2 * 2个块。
  5. Dropout层的概率为20%。
  6. Flatten 层。
  7. 与128个神经元和整流器完全连接层。
  8. 与50个神经元和整流器完全连接层。
  9. 输出层。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 定义模型
def larger_model():
     # 创建
     model = Sequential()
     model.add(Conv2D(30, (5, 5), input_shape=(1, 28, 28), activation='relu'))
     model.add(MaxPooling2D(pool_size=(2, 2)))
     model.add(Conv2D(15, (3, 3), activation='relu'))
     model.add(MaxPooling2D(pool_size=(2, 2)))
     model.add(Dropout(0.2))
     model.add(Flatten())
     model.add(Dense(128, activation='relu'))
     model.add(Dense(50, activation='relu'))
     model.add(Dense(num_classes, activation='softmax'))
     # 编译
     model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
     return model

像前两个实验一样,该模型适合10个周期,每批200。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 构造
model = larger_model()
# 调整
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200)
# 最终输出
scores = model.evaluate(X_test, y_test, verbose=0)
print("Large CNN Error: %.2f%%" % (100-scores[1]*100))

运行该实例打印每个时期的训练阶段并验证数据集的准确性以及最终的错误率。

模型需要大约100秒运行每个层。这个较大的模型达到了0.89%的可观的错误率。

代码语言:js
AI代码解释
复制
Train on 60000 samples, validate on 10000 samples
Epoch 1/10
60000/60000 ============================== - 45s - loss: 0.3912 - acc: 0.8798 - val_loss: 0.0874 - val_acc: 0.9726
Epoch 2/10
60000/60000 ============================== - 43s - loss: 0.0944 - acc: 0.9713 - val_loss: 0.0603 - val_acc: 0.9800
Epoch 3/10
60000/60000 ============================== - 43s - loss: 0.0697 - acc: 0.9781 - val_loss: 0.0377 - val_acc: 0.9880
Epoch 4/10
60000/60000 ============================== - 44s - loss: 0.0558 - acc: 0.9819 - val_loss: 0.0331 - val_acc: 0.9885
Epoch 5/10
60000/60000 ============================== - 44s - loss: 0.0480 - acc: 0.9852 - val_loss: 0.0300 - val_acc: 0.9900
Epoch 6/10
60000/60000 ============================== - 44s - loss: 0.0430 - acc: 0.9862 - val_loss: 0.0293 - val_acc: 0.9897
Epoch 7/10
60000/60000 ============================== - 44s - loss: 0.0385 - acc: 0.9877 - val_loss: 0.0260 - val_acc: 0.9911
Epoch 8/10
60000/60000 ============================== - 44s - loss: 0.0349 - acc: 0.9895 - val_loss: 0.0264 - val_acc: 0.9910
Epoch 9/10
60000/60000 ============================== - 44s - loss: 0.0332 - acc: 0.9898 - val_loss: 0.0222 - val_acc: 0.9931
Epoch 10/10
60000/60000 ============================== - 44s - loss: 0.0289 - acc: 0.9908 - val_loss: 0.0226 - val_acc: 0.9918
Large CNN Error: 0.82%

这不是一个优化的网络结果。最近的论文中也没有重构网络结构。你有很多机会调整和改进这个模型。

MNIST上的资源

MNIST数据集被很好地研究。以下是您可能想要了解的其他一些资源。

总结

在这篇文章中,我们了解了MNIST手写数字识别的问题以及使用Keras库在Python中开发的深度学习模型的方法,这些模型能够得到出色的效果。

通过本教程的学习,我们了解:

  • 如何加载Keras中的MNIST数据集并生成数据集的图表。
  • 如何重新构建MNIST数据集,并针对问题开发一个简单但性能良好的多层感知器模型。
  • 如何使用Keras为MNIST创建卷积神经网络模型。
  • 如何开发和评估具有近乎世界一流水平的更大的CNN模型。
评论
登录后参与评论
暂无评论
推荐阅读
web3.js中estimateGas如何计算智能合约消耗的gas量
我们可使用web3.js框架的estimateGas函数获得一个以太坊智能合约的Gas估计值 ,通过执行一个消息调用或交易,该消息调用或交易直接在节点的VM中执行,并未在区块链中确认,函数会返回估算使用的gas量。
笔阁
2018/09/04
5.7K0
web3.js中estimateGas如何计算智能合约消耗的gas量
web3.eth.sendTransaction
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 发送一个交易到网络。如果交易是一个合约创建的,请使用web3.eth.getTransactionReceipt()在交易完成后获取合约的地址。 调用: web3.eth.sendTransaction(transactionObject [, callback]) 参数: transactionObject : Object - 要发送的交易对象。 from:
用户1408045
2018/05/17
1.9K0
第十一课 从宠物商店案例看DAPP架构和WEB3.JS交互接口
【本文目标】 了解ETH生态下DAPP去中心化应用程序的框架和交互流程,了解WEB3.JS的作用和接口函数。 【前置条件】 完成了《第六课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)》的学习实践,对智能合约了解。 【技术收获】 1). DAPP架构 2). ETH节点框架 3).宠物商店的APP.js文件的业务处理流程图和函数介绍 4).web3.js接口
辉哥
2018/08/10
2.7K0
第十一课 从宠物商店案例看DAPP架构和WEB3.JS交互接口
快速学习-web3.js简介与入门
为了帮助 web3 集成到不同标准的所有类型项目中,1.0.0 版本提供了多种方式来处理异步函数。大多数的 web3 对象允许将一个回调函数作为最后一个函数参数传入,同时会返回一个promise 用于链式函数调用。
cwl_java
2020/04/17
7K0
web3.eth.getTransaction
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 返回匹配指定交易哈希值的交易。 调用: web3.eth.getTransaction(transactionHash [, callback]) 参数: transactionHash: String - 交易的哈希值。 callback: Function - 回调函数,用于支持异步的方式执行7。 返回值: Object - 一个交易对象 hash: Str
用户1408045
2018/05/17
2.5K1
web3.eth.getBlock
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 返回块号或区块哈希值所对应的区块 调用: web3.eth.getBlock(blockHashOrBlockNumber [, returnTransactionObjects] [, callback]) 参数: blockHashOrBlockNumber: Number|String -(可选)如果未传递参数,默认使用web3.eth.defaultBlo
用户1408045
2018/05/17
1.1K0
10分钟,前端工程师也能玩转区块链Web3.js开发
一个不想写后台的前端不是一个好全栈,前端也可以玩转区块链Web3.js开发。 老吴(北京志顶科技有限公司技术总监、区块链专家)针对前端工程师如何玩转Web3.js开发后端钱包这一主题,分享了自己开
区块链大本营
2018/06/19
3.7K0
web3js 实战基本操作
这个篇文章的总结是在学习 b站web3.js的一个基础教程课 的课程总结,方便后续在文章中查找API。
六个周
2023/02/16
1.8K0
web3.eth.getBalance
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战开发入门 以太坊+IPFS去中心化电商DApp实战开发 返回链上指定地址的账户余额。 调用: web3.eth.getBalance(addressHexString [, defaultBlock] [, callback]) 参数: addressHexString: String - 要查询余额的地址。 defaultBlock: Number|String -(可选)如果不设置此值,将使用
用户1408045
2018/05/17
1.2K0
【一步步一起学DApp开发】(四)web3.js 基本使用 | 连接geth | 创建web客户端
web3.js内部使用JSONRPC与geth通信。它把所有JSON-RPC API当作JavaScript API,也就是说,它不仅支持所有与以太坊相关的API,还支持与Whisper和Swarm相关的API。
前端修罗场
2023/10/07
1.1K0
如何估算太坊交易的gas消耗量
在以太坊中,使用estimateGas()方法来估算一个交易要消耗的gas消耗量。我们区分普通转账交易和合约方法交易进行说明。 普通转账交易 对于普通转账交易而言,使用web3.eth.estimateGas()方法进行估计。例如: var from = web3.eth.accounts[1] var to = web3.eth.accounts[2] var quantity = web3.eth.estimateGas({ from:from, to:to, value:500000000
用户1408045
2018/05/17
1K0
web3.eth.sendRawTransaction
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 发送一个已经签名的交易。比如可以用下述签名的例子。 如果交易是一个合约创建,请使用web3.eth.getTransactionReceipt()在交易完成后获取合约的地址。 调用: web3.eth.sendRawTransaction(signedTransactionData [, callback]) 参数: signedTransacionData: S
用户1408045
2018/05/17
1.2K0
web3.js:使用eth包
web3-eth包提供了一套强大的功能,可以与以太坊区块链和智能合约进行交互。在本教程中,我们将指导您如何使用web3.js版本4的web3-eth包的基础知识。我们将在整个示例中使用TypeScript。
孟斯特
2024/05/13
2580
web3.js:使用eth包
以太坊DApp系列(二)---从入门到出家
以太坊自2013年V神提出后,被无数人赋予美好的愿景,甚至被称为区块链2.0,其代币发行量更是达到了全球第二,仅次于比特币,而其带来的智能合约概念颠覆了人们对区块链的理解,让区块链不仅仅是个账本,更像一个操作系统,赋予了每个节点“智能”。经过差不多半年来断断续续的学习、理解和沉淀,笔者今天想揭开以太坊DApp神秘的面纱,看看以太坊是猴还是猿。
forrestlin
2018/07/17
3.7K0
以太坊DApp系列(二)---从入门到出家
web3.eth.getTransactionReceipt
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 指定一个交易哈希,返回一个交易的收据。需要指出的是,处于pending状态的交易,收据是不可用的。 调用: web3.eth.getTransactionReceipt(hashString [, callback]) 参数: hashString: String - 交易的哈希 callback: Function - 回调函数,用于支持异步的方式执行7。 返回
用户1408045
2018/05/17
1.3K0
Web工程师以太坊入门
我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集。我们的生态系统正在迅速发展,我认为很多新人都感到不知所措。以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的时间让专业知识充分渗透。我希望人们知道以太坊开发实际上与现代Web开发人员工作流程非常兼容——将以太坊功能集成到任何Web应用程序中相对容易,你可以从今天开始。
Javanx
2019/09/04
7460
web3j教程:java使用web3j开发以太坊智能合约交易
为了进行这些交易,必须有以太币(以太坊区块链的代币)存在于交易发生的以太坊账户中。这是为了支付gas成本,这是为支付参与交易的以太坊客户端的交易执行成本,支付了这个成本就能将结果提交到以太坊区块链上。获得以太币的说明下文会说到。
笔阁
2018/09/04
8K1
web3j教程:java使用web3j开发以太坊智能合约交易
以太坊智能合约部署与交互
我们再打开一个终端,打开cluster1的peer02的控制台,直接at到上一个终端部署的智能合约地址并进行set操作
笔阁
2018/09/04
2.7K0
以太坊智能合约部署与交互
以太坊基本概念:交易及交易费用
交易 一笔交易是一条消息,从一个账户发送到另一个账户(可能是相同的账户或者零账户,见下文)。交易可以包含二进制数据(payload)和以太币。 如果目标账户包含代码,该代码会执行,payload就是输入数据。 如果目标账户是零账户(账户地址是0),交易将创建一个新合约。正如上文所讲,这个合约地址不是零地址,而是由合约创建者的地址和该地址发出过的交易数量(被称为nonce)计算得到。创建合约交易的payload被当作EVM字节码执行。执行的输出做为合约代码被永久存储。这意味着,为了创建一个合约,你不需要向合约
用户1408045
2018/05/17
1.2K0
第三课 以太坊术语说明及开发者资源列表
也称钱包,提供账户管理、挖矿、转账、智能合约的部署和执行等等功能,以太坊节点利用以太坊客户端接入到以太坊网络。 现在以太坊客户端主要有:Wallent/ist , Geth, Parity, Harmony,
辉哥
2018/08/10
7930
第三课 以太坊术语说明及开发者资源列表
相关推荐
web3.js中estimateGas如何计算智能合约消耗的gas量
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • MNIST手写数字识别问题的描述
  • 在Keras中加载MNIST数据集
  • 具有多层结构的基本模型
  • MNIST简单的卷积神经网络
  • 更大的MNIST卷积神经网络
  • MNIST上的资源
  • 总结
加入讨论
的问答专区 >
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档